Codeforces Gym 101173 K. Key Knocking (构造)
来源:互联网 发布:考勤机怎么恢复数据 编辑:程序博客网 时间:2024/06/05 17:40
题意
对于给定的长为 weight >= 2n
。
字符串的 weight 为 相邻不同字符的个数 + 1
. 如 011010100 的 weight = 7
单次变换为选择连续的两个数,将
解题思路
构造,对于前 weight
+2 的贡献。
当
- 0|000 -> 0|110
- 0|001 -> 0|010
- 0|011 -> 0|101
- 0|111 -> 0|110
其余组合可不变换。当
代码
#include<bits/stdc++.h>using namespace std;const int BASE = '0'+'1';const int N = 100000 + 10;int n;char s[N * 3];vector<int> v;inline void rev(int pos) { s[pos] = BASE - s[pos]; s[pos-1] = BASE - s[pos-1]; }bool initJug() { int ret = 1; for(int i=1;i<n;i++) if(s[i] != s[i-1]) ret++; return ret >= n/3*2 ? true : false;}bool jug(int start){ int ret = 0; for(int i=start;i<start+3;i++) if(s[i] != s[i-1]) ret++; return ret >= 2 ? true : false;}void solve(int start){ if(jug(start)) return; rev(start+1); if(jug(start)) { v.push_back(start+1); return; } rev(start+1), rev(start+2); v.push_back(start+2);}int main(){ while(scanf(" %s", s)!=EOF) { v.clear(); n = strlen(s); if(initJug()) { printf("0\n"); continue; } if(s[0] == s[1] && s[1] == s[2]) rev(2), v.push_back(2); for(int i=3;i<n;i+=3) solve(i); printf("%d\n", v.size()); for(int i=0;i<v.size();i++) printf("%d%c", v[i], i==v.size()-1 ? '\n' : ' '); }}
阅读全文
0 0
- Codeforces Gym 101173 K. Key Knocking (构造)
- GYM 101173 K.Key Knocking(构造)
- GYM CERC 16 K Key Knocking 构造
- Codeforces Gym 100623K Problem K. Key to Success
- codeforces [Gym-100814K]
- Codeforces Gym 101142 J. Java2016 (构造)
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
- Codeforces gym 101149 K 想法
- Codeforces gym 101102 K 想法
- codeforces Gym 101341 K Competitions
- codeforces GYM 101431D(构造)
- [构造][度数序列的可图性]Codeforces Gym 100269K. Kids in a Friendly Class
- Codeforces Gym 101164 K. Cutting (字符串 HASH)
- Codeforces Gym 101174 K. Balls and Needles (DFS)
- GYM 101173 L.Lost Logic(构造)
- Codeforces Gym 100792K King's Rout
- Codeforces Gym 101142 K. King's Heir
- Codeforces Gym 101484 K Counting Good Teams
- usb_serial部分分析4
- Codeforces Gym 101173 H. Hangar Hurdles (LCA + 并查集)
- Android的UI与线程
- Linux下SSH默认22端口的修改方法
- libevent编程疑难解答
- Codeforces Gym 101173 K. Key Knocking (构造)
- selectivesearch python3 错误解决
- 【网络】TCP三次握手建立连接和四次挥手释放链接
- Dns数据包内容分析
- Windows驱动,一次死机教训
- 【Spring实战】----springMVC4.3.2的配置
- 操作系统第一章
- JavaScript本地对象常用方法(六)——history对象和location对象
- usb_serial部分分析5