P1203 [USACO1.1]坏掉的项链Broken Necklace
不错的断环为链的模拟题,开成三倍,有很多细节要考虑,比如总长度要<=n,开头第一个是w等等。
#include<bits/stdc++.h> using namespace std; char c[10000]; int n; int ans=-2147483647; int r(int x) { int r=x; char t; while(c[r]=='w') r++; t=c[r]; while(c[r+1]==t||c[r+1]=='w') r++; return (r-x+1>n?n:r-x+1); } int l(int x) { int l=x; char t; while(c[l]=='w') l--; t=c[l]; while(c[l-1]==t||c[l-1]=='w') l--; return (x-l+1>n?n:x-l+1); } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>c[i+n]; c[i]=c[i+n]; c[i+2*n]=c[i+n]; } for(int i=n;i<2*n;i++) ans=max(ans,l(i)+r(i+1)); cout<<min(ans,n); return 0; }