CF1734C Removing Smallest Multiples 题解
本题需要使用类似埃氏筛的做法。
很显然,一个数如果需要被删除,那么最小的代价
知道这一点就很好做了,枚举
这样一直做下去,我们就可以解决问题了。
放代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int t; cin>>t;
while(t--){
int n; long long c=0; string s; cin>>n>>s;
vector<bool> b(n);
for(int i=1;i<=n;i++){
if(!(s[i-1]&1)){
if(!b[i-1])c+=i;
for(int j=2;i*j<=n;j++){
if(!(s[i*j-1]&1)){
if(!b[i*j-1])c+=i,b[i*j-1]=true;
}
else break;
}
}
}
cout<<c<<'\n';
}
return 0;
}