GYM 101173 K.Key Knocking(构造)
来源:互联网 发布:对撞机 知乎 编辑:程序博客网 时间:2024/05/19 22:01
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
#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 111111char 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;}
0 0
- GYM 101173 K.Key Knocking(构造)
- Codeforces Gym 101173 K. Key Knocking (构造)
- GYM CERC 16 K Key Knocking 构造
- GYM 101173 L.Lost Logic(构造)
- Codeforces Gym 100623K Problem K. Key to Success
- Gym 100962G Green Day (K个生成树构造1个完全图 -- 找规律)
- Gym 100796K Profact(爆搜+剪枝)
- GYM 100247 K. Three Contests(CDQ)
- GYM 100030 K.Triskaidekaphobia(水~)
- GYM 100090 K.Bracket Sequence(水~)
- GYM 100488 K.Two Pirates(set)
- GYM 100827 K.Towers(dfs)
- GYM 100712 K.Runtime Error(水~)
- GYM 100971 K.Palindromization(hash)
- GYM 100694 K.Team Rating(水~)
- GYM 101149 M.Ex Machina(构造)
- Codeforces Gym 101142 J. Java2016 (构造)
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
- snort 源码分析之模式匹配引擎
- 文章标题
- banner(图片轮播)框架的使用
- AndroidStudio下ButterKnife的集成和使用
- PHP中的socket函数
- GYM 101173 K.Key Knocking(构造)
- ADO.NET 连接数据库字符串小结(Oracle、SqlServer、Access、ODBC)
- 《C++实现数据结构》:队列
- acm程序设计书中的题目j
- sql语句 rollup() 面向 oracle
- HashMap深度解析(一)
- List
- Date日期(Calendar获取方法)
- VS2013中为C++程序生成lib和dll文件