倒着看s,第y位是1,其余<x的都是0,判断一下即可。
#include "bits/stdc++.h"
using namespace std;
long long a[200004];
int main() {
int n,x,y;
cin>>n>>x>>y;
string s;
cin>>s;
int cnt=0;
int ans=0;
for (int i = s.length()-1; cnt<x ; --i,++cnt) {
if(cnt==y)ans+=s[i]!='1';
else ans += s[i]=='1';
}
cout<<ans<<endl;
}
排序判断一下就可以了。
#include "bits/stdc++.h"
using namespace std;
long long a[200004];
int main() {
int n;
cin>>n;
for (int i = 0; i < n; ++i) {
scanf("%d",&a[i]);
}
sort(a,a+n);
int d=1;
for (int i = 0; i < n; ++i) {
if(a[i]>=d)d++;
}
cout<<d-1<<endl;
}
如果当前是奇数位且后面是相同的那直接erase就可以了,最后判断一下奇偶。
#include "bits/stdc++.h"
using namespace std;
const int mod = 998244353;
long long a[200004];
long long b[200004];
int main() {
int n;
string s;
cin>>n>>s;
for (int i = 0; i < s.length(); ++i) {
while((i+1)&1&&i+1<s.length()&&s[i+1]==s[i]){
s.erase(s.begin()+i+1);
}
}
if(s.length()&1)s.erase(--s.end());
cout<<n-s.length()<<endl<<s<<endl;
}
https://blog.csdn.net/qq_42671946/article/details/90234399
E - Two Arrays and Sum of Functions
https://blog.csdn.net/qq_42671946/article/details/90234387
F1 - Microtransactions (easy version)&&F2 - Microtransactions (hard version)
https://blog.csdn.net/qq_42671946/article/details/90234363