您当前的位置: 首页 > 

HeartFireY

暂无认证

  • 1浏览

    0关注

    334博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[GYM101173K] CERC 16 K.Key Knocking 构造

HeartFireY 发布时间:2021-10-26 23:53:13 ,浏览量:1

题目大意:定义一个串的价值为相邻不同的个数 + 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种状态。

  1. bef = 0
    • 000
    • 001
    • 011
    • 111
  2. 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             
关注
打赏
1662600635
查看更多评论
0.0483s