codeforce 1025C - Plasticine zebra (模拟)

有一个由‘w’和‘b’组成字符串,你可以把这个字符串分成两个部分,然后分别翻转,次数不限(比如bw|bbw (‘|’代表分割线), 翻转之后变成 "wbwbb".)。问你连续的‘w’ ‘b’ 交替出现的最长长度是多少。

我们观察这个操作的特点,发现其实就像相当于把这个串的首尾相连,然后在分隔处截断。也就是说,如果我们把这个字符串看成首尾相连的一个环,那么,不管怎么操作,这些字母的相对位置都是不会改变的,也就是说,我们直接统计这个环里面的最长交替出现的长度即可。

至于怎么把它看成一个环,我是把数组在数组的末尾又复制了一遍,但是这样如果这个字符串都是交替出现的话,结果会比n大哦,所以需要特判一下。

#include <bits/stdc++.h>

using namespace std;

char s[200000+5];
int ans=0,cnt=0;

int main()
{
    ios::sync_with_stdio(false);
    cin>>s;
    int len=strlen(s);
    memcpy(s+len,s,strlen(s));
    len<<=1;
    for(int i=1;i<len;i++)
    {
        cnt=1;
        while(s[i]!=s[i-1]&&i<len) {
            cnt++;i++; //cout<<i<<" "<<cnt<<endl;
        }
        ans=max(ans,cnt);
    }
    len>>=1;
    cout<<min(ans,len)<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/Fy1999/p/9574459.html

时间: 2024-11-09 00:52:36

codeforce 1025C - Plasticine zebra (模拟)的相关文章

Codeforces 1025C Plasticine zebra(思维)

题目链接:CF 1025C 题意:给定一个只有b和w的字符串,可以选定任意位置,得到两个字符串(可以是空串)并进行翻转,操作可以进行任意次,求连续的不同字符的最大长度. 题解:考虑翻转的意义,无非就是拼成一个环,可以从任意地方截取,我们可以得到把原字符串扩增一倍,在得到的新的字符串中寻找连续的不同字符的最大长度即答案.注意超过n选取n. 1 #include <set> 2 #include <map> 3 #include <queue> 4 #include <

Codeforce 371A K-Periodic Array(模拟)

题目链接 K-Periodic Array 简单题,直接模拟即可. 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define REP(i,n) for(int i(0); i < (n); ++i) 6 #define rep(i,a,b) for(int i(a); i <= (b); ++i) 7 const int N = 100000 + 10; 8 9 int a[N]; 10 int n, k; 11

CF1025C Plasticine zebra【环状字符串/思维】

给你一个长度为 \(\left|s\right|\) 的01串 \(s\) ,每次操作你可以任选一个 \(k\) ,使01串的 \([1,k]\) 和 \((k,\left|s\right|]\) 分别翻转(其中一个区间可以为空),求经过任意次操作后能得到的最长的01交替出现的子串的长度.(实际题目中01用w和b代替) #include<cstdio> #include<string> #include<cstdlib> #include<cmath> #i

codeforces cf round#505(based on vk cup 2018 final) C. Plasticine zebra

构造题,把整个串想象成一个环.每次把环断开并反转的时候从切口处看进去的顺序是和刚开始从头到尾的顺序是一样的.于是每次不管如何翻转最后都要找到这个环上最大的连续子段长度 #include<bits/stdc++.h> using namespace std; string s; int main() { cin>>s; int tmp=s.size(); s=s+s; int ans=0; int len=1; for(int i=0;i<(int)s.size()-1;i++

Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) -B C(GCD,最长连续交替序列)

B. Weakened Common Divisor time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input output standard output During the research on properties of the greatest common divisor (GCD) of a set of numbers, Ildar, a famous mat

Codeforces Round #505 (Div 1 + Div 2 Combined) Partial Solution

从这里开始 题目列表 瞎扯 Problem A Doggo Recoloring Problem B Weakened Common Divisor Problem C Plasticine zebra Problem D Recovering BST Problem E Colored Cubes Problem F Disjoint Triangles Problem G Company Acquisitions 瞎扯 打比赛,发现自己特别菜. 居然还苟且水上紫名 这个号不敢玩了.要努力学习

Codeforces Round #505 Div. 1 + Div. 2

传送门:>Here< 从来没打过\(CF\)(由于太晚了)-- 不知道开学了以后有没有机会能够熬夜打几场,毕竟到现在为止都是\(unrated\)好尴尬啊~ 今天早上打了几题前几天的比赛题-- A. \(Doggo \ Recoloring\) 此题应当是签到题,但我还是傻了很久.很容易发现只要有任意一种狗的颜色超过\(1\),那么这种狗就是可以变色的.那么它永远只需要变为任意一个与他相邻的狗的颜色,数量不会减少反而增多.因此可以不停变下去.于是我们只需要统计一下是否有一种颜色是大于等于两个的

Codeforce 264 B Caisa and Pylons(模拟)

 题意   Caisa走台阶  有n个台阶  第i个台阶的高度为h[i]  从第i个台阶包括地面到下一个台阶得到的能量为h[i]-h[i+1]  能量不足以跳到下一个台阶就要补充能量  求Caisa跳完所有台阶最少要补充多少能量 水题   直接模拟 #include<cstdio> #include<cstring> using namespace std; const int N = 100005; int h[N]; int main() { int n, e, ans;

Kilani and the Game-吉拉尼的游戏 CodeForce#1105d 模拟 搜索

题目链接:Kilani and the Game 题目原文 Kilani is playing a game with his friends. This game can be represented as a grid of size ??×??, where each cell is either empty or blocked, and every player has one or more castles in some cells (there are no two castle