GYM 101173 K.Key Knocking(构造)
2017-03-20 16:06
423 查看
Description
一个长度为3*n的01串,每次可以翻转连续的两个字符,要求至多翻转n次使得这个3*n的串至少有2*n个连续的段且相邻两端不一样(就是连续的0算一段,然后连续的1,…)
Input
一个长度为3*n的01串(1<=n<=1e5)
Output
首先输出最少操作数,之后输出每次操作的位置(一次翻转的位置是该次翻转的连续两个字符的第一个编号)
Sample Input
000000000
Sample Output
3
2 5 6
Solution
每三个一组,只要能把每组分成两段而且和前面的不连着最后段数一定不小于2*n,例如前一个是1(0同理),当前组只有八种情况(冒号前表示操作前状态,冒号后表示操作后的状态):
000:011
001:001
010:010
011:011
100:010
101:101
110:101
111:001
故每种情况至多操作一次即可,扫一遍即得到操作位置
Code
一个长度为3*n的01串,每次可以翻转连续的两个字符,要求至多翻转n次使得这个3*n的串至少有2*n个连续的段且相邻两端不一样(就是连续的0算一段,然后连续的1,…)
Input
一个长度为3*n的01串(1<=n<=1e5)
Output
首先输出最少操作数,之后输出每次操作的位置(一次翻转的位置是该次翻转的连续两个字符的第一个编号)
Sample Input
000000000
Sample Output
3
2 5 6
Solution
每三个一组,只要能把每组分成两段而且和前面的不连着最后段数一定不小于2*n,例如前一个是1(0同理),当前组只有八种情况(冒号前表示操作前状态,冒号后表示操作后的状态):
000:011
001:001
010:010
011:011
100:010
101:101
110:101
111:001
故每种情况至多操作一次即可,扫一遍即得到操作位置
Code
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<ctime> using namespace std; typedef long long ll; #define INF 0x3f3f3f3f #define maxn 111111 char s[maxn*3]; int ans[maxn],res; int main() { while(~scanf("%s",s+1)) { s[0]='0'; int n=strlen(s+1); res=0; for(int i=1;i+2<=n;i+=3) { int a=s[i]-'0',b=s[i+1]-'0',c=s[i+2]-'0'; if(s[i-1]=='0') { if(a==0&&b==0&&c==0)ans[res++]=i; else if(a==0&&b==0&&c==1)ans[res++]=i+1,s[i+2]='0'; else if(a==0&&b==1&&c==1)ans[res++]=i; else if(a==1&&b==1&&c==1)ans[res++]=i+1,s[i+2]='0'; } else { if(a==0&&b==0&&c==0)ans[res++]=i+1,s[i+2]='1'; else if(a==1&&b==0&&c==0)ans[res++]=i; else if(a==1&&b==1&&c==0)ans[res++]=i+1,s[i+2]='1'; else if(a==1&&b==1&&c==1)ans[res++]=i; } } printf("%d\n",res); for(int i=0;i<res;i++)printf("%d%c",ans[i],i==res-1?'\n':' '); } return 0; }
相关文章推荐
- Codeforces Gym 101173 K. Key Knocking (构造)
- GYM CERC 16 K Key Knocking 构造
- [构造] Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks
- [构造] Codeforces Gym 101173 CERC 16 K & BZOJ 4796 Key Knocking
- GYM 101173 L.Lost Logic(构造)
- [2-SAT 构造] Codeforces Gym 101173 CERC 16 L. Lost Logic
- GYM 100488 M.Construct a Permutation(构造)
- [构造] Codeforces Gym 101190 NEERC 16 C. Cactus Construction
- GYM 101142 B.Boys and Girls(构造)
- Codeforces Gym 101173 J. Jazz Journey
- GYM 101173 A.Appearance Analysis(map)
- [高中数学联赛题] Codeforces Gym 101173 CERC 16 E. Easy Equation
- Codeforces Gym 100342H Hard Test 构造
- GYM 101173 H.Hangar Hurdles(并查集+bfs+dfs)
- Codeforces Gym 100269K Kids in a Friendly Class 构造题
- I - Keylogger Gym - 101078I——模拟队列+栈
- $n$-Way Tie Gym - 100741K 构造
- Gym - 101243H Non-random numbers【构造+数学】
- Codeforces Gym 100342H Problem H. Hard Test 构造题,卡迪杰斯特拉
- [状压DP Hall定理 折半] Codeforces Gym 101173 CERC 16 B & BZOJ 4788 Bipartite Blanket