题目大意:定义一个串的价值为相邻不同的个数+1+1+1,给定一个长度为3n3n3n的字符串,要求通过最多nnn次操作,使得串的价值至少为2n2n2n。操作反转两个相邻元素:将[x],[x+1][x],[x+1][x],[x+1]两个元素的值反转,0→1,1→00 \rightarrow 1,1 \rightarrow 00→1,1→0.

思路:每333个字符执行一次分割,只要能把每组分成222段而且和前面的不相连,最后段数一定不小于2n2n2n。因此首先判断前一个字符,然后根据前一个字符枚举当前333个字符的状态,共161616种状态,去除已经分好不需要操作的状态共888种状态。

  1. bef = 0

    • 000
    • 001
    • 011
    • 111
  2. bef = 1
    • 000
    • 100
    • 110
    • 111

分别计数判断即可。

#include <bits/stdc++.h>
using namespace std;int ans[5000010], cnt = 0;inline void solve(){string str; cin >> str;int n = str.length();str = ' ' + str;for(int i = 1; i + 2 <= n; i += 3){int bef = str[i - 1] - '0', fir = str[i] - '0', sec = str[i + 1] - '0', thd = str[i + 2] - '0';if(!bef){if(!fir && !sec && !thd) ans[++cnt] = i;else if(!fir && !sec && thd) ans[++cnt] = i + 1, str[i + 2] = '0';else if(!fir && sec && thd) ans[++cnt] = i;else if(fir && sec && thd) ans[++cnt] = i + 1, str[i + 2] = '0';}else{if(!fir && !sec && !thd) ans[++cnt] = i + 1, str[i + 2] = '1';else if(fir && !sec && !thd) ans[++cnt] = i;else if(fir && sec && !thd) ans[++cnt] = i + 1, str[i + 2] = '1';else if(fir && sec && thd) ans[++cnt] = i;}}cout << cnt << endl;for(int i = 1; i <= cnt; i++) cout << ans[i] << (i == cnt ? '\n' : ' ');
}signed main(){solve();
}

[GYM101173K] CERC 16 K.Key Knocking 构造相关推荐

  1. GYM CERC 16 K Key Knocking 构造

    Problem K 题意:给出长度为3n的01串,定义一个串的价值为:相邻不同的个数+1.例如011010100 价值为7. 操作反转两个相邻元素:将[x,x+1]两个元素的值反转,0->1,1 ...

  2. [构造] Codeforces Gym 101173 CERC 16 K BZOJ 4796 Key Knocking

    每三个一起考虑 不论如何 我们都可以进行最多一次操作使得答案加2 就好了 #include<cstdio> #include<cstdlib> #include<algo ...

  3. Codeforces Gym 101173 K. Key Knocking (构造)

    题意 对于给定的长为 3×N3\times N 的 01 字符串 S,求在最多变换 N 次下使得字符串 S 的 weight >= 2n . 字符串的 weight 为 相邻不同字符的个数 + ...

  4. GYM 101173 K.Key Knocking(构造)

    原题链接 参考自 问题描述:一个长度为3*n的01串,每次可以翻转连续的两个字符,要求至多翻转n次使得这个3*n的串至少有2*n个连续的段且相邻两端不一样(就是连续的0算一段,然后连续的1,-) 解法 ...

  5. Codeforces Gym 101173 CERC 16 D BZOJ 4790 Dancing Disks

    Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks 强烈安利这道构造题目,非常有意思. 这里用到的思想是归并排序! 多路归并排序 ...

  6. Arthas 开源一周年,GitHub Star 16 K ,我们一直在坚持什么?

    缘起 最近看到一个很流行的标题,<开源XX年,star XXX,我是如何坚持的>. 看到这样的标题,忽然发觉 Arthas 从 2018 年 9 月开源以来,刚好一年了,正好在这个秋高气爽 ...

  7. HashMap中的putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict)解读

    在面试中我们会经常遇到关于HashMap的问题,这里我写了我对HashMap里面一个挺重要的方法 putVal(int hash, K key, V value, boolean onlyIfAbse ...

  8. Gym-101173K Key Knocking 思维+贪心

    这道题感觉是道很好的贪心题.主要问题是"怎么贪". 先附上大佬博客Orz: http://www.cnblogs.com/ShuraK/p/9557440.html https:/ ...

  9. K Co-prime Permutation 构造,gcd,互质(2020.12.南京)

    题意 : 求构造一个n的排列,满足其中恰好k个元素与下标互质,如果不能则输出-1 思路 : 让前k个与下标偏移1,后面的都与下标相同即可 当且仅当k=0时,无解,输出-1 #include <i ...

最新文章

  1. 吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(2)
  2. 菜鸟建站别发愁,省钱建站新攻略!
  3. Android图片缓存之Lru算法
  4. socket编码问题
  5. linux+gpfs配置文件,GPFS for linux实施
  6. Android之退出应用关闭项目每个Activity的总结
  7. 推荐系统图算法实用干货汇总(含论文、代码、样例教程)
  8. 带虚函数的类的sizeof分析
  9. 初学者python笔记(os模块、sys模块)
  10. WORD批量更改所有图片大小
  11. 【渝粤教育】国家开放大学2018年春季 7406-22T金融统计分析 参考试题
  12. 重置单例对象Singleton Swift
  13. JDK1.8中文帮助文档下载
  14. 安信可nbiot模块_安信可wifi模组特征
  15. Ansible使用基础之tags标记
  16. 2022年国家法定节假日放假时间安排
  17. 项目实训(十六)FPS游戏之PUN角色位移同步,动画状态同步
  18. 十二载征程犹未止,看今朝星光尽闪耀丨万字长文回顾2023数据技术嘉年华
  19. 如何通过优化物流体验的技术来提高客单价?
  20. 解决click在ios反应慢的问题

热门文章

  1. cad的lisp画线_Lisp CAD 求助高手!怎么通过代码实现连续画直线?
  2. 后台如何清理软Raid
  3. OpenGL学习笔记--配置VS环境
  4. lol手游日服服务器未响应,LOL手游进不去怎么回事?日服登陆失败解决办法[多图]...
  5. 如何让linux时间与internet时间同步(centos)
  6. Windows Git 多用户多仓库配置
  7. Java---SSM---Spring(1)
  8. Android---性能优化方案分享,高级android开发强化实战pdf
  9. 计算机操作系统之设备管理思维导图
  10. asyncio 系列五、asyncio的事件循环