题目大意:定义一个串的价值为相邻不同的个数 + 1 +1 +1,给定一个长度为 3 n 3n 3n的字符串,要求通过最多 n n n次操作,使得串的价值至少为 2 n 2n 2n。操作反转两个相邻元素:将 [ x ] , [ x + 1 ] [x],[x+1] [x],[x+1]两个元素的值反转, 0 → 1 , 1 → 0 0 \rightarrow 1,1 \rightarrow 0 0→1,1→0.
思路:每 3 3 3个字符执行一次分割,只要能把每组分成 2 2 2段而且和前面的不相连,最后段数一定不小于 2 n 2n 2n。因此首先判断前一个字符,然后根据前一个字符枚举当前 3 3 3个字符的状态,共 16 16 16种状态,去除已经分好不需要操作的状态共 8 8 8种状态。
bef = 0
000
001
011
111
bef = 1
000
100
110
111
分别计数判断即可。
#include
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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?