CF训练字符串小结论
原文链接:https://www.cnblogs.com/Time25/p/19854811.html
题目
https://codeforces.com/problemset/problem/2192/B
解析
就是给你一个01字符串,要求的是你选择一个下标,除了这个下标之外的所有s[i]都是取反,就是0变成1,1变成0,要求后面全部变成0,结论就是,如果0的个数是奇数,或者1的个数是偶数就可以
#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using namespace std;
//"O campeão tem nome, e se chama Charles Oliveira!"
using ld = long double;
using ui = unsigned;
using ull = unsigned long long;
using i128 = __int128;
/*
这个是可以严格证明的,但是没必要写下来:
*/
void solve() {
int n;cin>>n;
string s;cin>>s;
int cnt0=0,cnt1=0;
for(int i=0;i<s.length();i++){
if(s[i]=='0'){
cnt0++;
}
else {
cnt1++;
}
}
if(cnt1%2==0){
cout<<cnt1<<endl;
for(int i=0;i<s.length();i++){
if(s[i]=='1'){
cout<<i+1<<" ";
}
}
cout<<endl;
}
else if(cnt0%2==1){
cout<<cnt0<<endl;
for(int i=0;i<s.length();i++){
if(s[i]=='0'){
cout<<i+1<<" ";
}
}
cout<<endl;
}
else {
cout<<-1<<endl;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
//prefact();
while(t--)solve();
}
// TRAINING LOG · 第 49 / 76 篇训练记录 · 成文于 2026.04.12 · 正午 11:44
本文是原创文章,采用CC BY-NC-SA 4.0许可协议,完整转载请注明来自FMAN720 / ALGO LOG
