题目链接:CF 1025C
题意:给定一个只有b和w的字符串,可以选定任意位置,得到两个字符串(可以是空串)并进行翻转,操作可以进行任意次,求连续的不同字符的最大长度。
题解:考虑翻转的意义,无非就是拼成一个环,可以从任意地方截取,我们可以得到把原字符串扩增一倍,在得到的新的字符串中寻找连续的不同字符的最大长度即答案。注意超过n选取n。
1 #include <set> 2 #include <map> 3 #include <queue> 4 #include <deque> 5 #include <stack> 6 #include <cmath> 7 #include <cstdio> 8 #include <vector> 9 #include <string> 10 #include <cstring> 11 #include <fstream> 12 #include <iostream> 13 #include <algorithm> 14 using namespace std; 15 16 #define eps 1e-8 17 #define PI acos(-1.0) 18 #define INF 0x3f3f3f3f 19 #define FAST_IO ios::sync_with_stdio(false) 20 21 const int N=2e5+10; 22 typedef long long LL; 23 char s[N]; 24 25 int main(){ 26 scanf("%s",s); 27 int n=strlen(s); 28 for(int i=0;i<n;i++) s[i+n]=s[i]; 29 int ans1=1,ans2=1,id=-1; 30 if(s[0]==‘w‘) id=-1; 31 else id=1; 32 for(int i=1;i<2*n;i++){ 33 if(s[i]==‘w‘){ 34 if(id==1) ans1++,id=-1; 35 else{ 36 if(s[i]==‘b‘) ans1++,id=-1; 37 else{ 38 ans1=1; 39 } 40 } 41 ans2=max(ans1,ans2); 42 } 43 else{ 44 if(id==-1) ans1++,id=1; 45 else{ 46 if(s[i]==‘w‘) ans1++,id=1; 47 else{ 48 ans1=1; 49 } 50 } 51 ans2=max(ans1,ans2); 52 } 53 } 54 if(ans2>n) ans2=n; 55 printf("%d\n",ans2); 56 return 0; 57 }
原文地址:https://www.cnblogs.com/ehanla/p/9520877.html
时间: 2024-11-09 03:35:26