1 条题解
-
0
评分
思路与复杂度
扫描提交串,用布尔数组判断每题是否第一次出现,首次出现累加基础分。最后检查 l 到 r 是否全部出现,满足时再累加这些题的基础分。时间 O(m+n),空间 O(n),总分使用64位整数。
正确性与边界
首次出现标记恰好对应一次基础得分;额外得分只由最终覆盖条件决定。
参考代码
#include<bits/stdc++.h> using namespace std;int main(){ios::sync_with_stdio(0);cin.tie(0);int n,m,l,r;cin>>n>>m>>l>>r;vector<long long>a(n);for(auto&x:a)cin>>x;string s;cin>>s;vector<int>v(n);long long z=0;for(char c:s){int x=c-'0';if(!v[x])v[x]=1,z+=a[x];}bool ok=1;for(int i=l;i<=r;i++)ok&=v[i];if(ok)for(int i=l;i<=r;i++)z+=a[i];cout<<z<<"\n";}
- 1