A.珠
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20(NOIP模拟赛Day1)/珠
题解:sb题,把原串复制一边接到后面然后来回扫两遍即可。
sb题还不能A,我是大sb,数组开小+只扫一遍=90
幸亏出题人数据良心T_T
代码:
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<iostream> 7 #include<vector> 8 #include<map> 9 #include<set> 10 #include<queue> 11 #include<string> 12 #define inf 1000000000 13 #define maxn 200000+1000 14 #define maxm 500+100 15 #define eps 1e-10 16 #define ll long long 17 #define pa pair<int,int> 18 #define for0(i,n) for(int i=0;i<=(n);i++) 19 #define for1(i,n) for(int i=1;i<=(n);i++) 20 #define for2(i,x,y) for(int i=(x);i<=(y);i++) 21 #define for3(i,x,y) for(int i=(x);i>=(y);i--) 22 #define mod 1000000007 23 using namespace std; 24 inline int read() 25 { 26 int x=0,f=1;char ch=getchar(); 27 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 28 while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();} 29 return x*f; 30 } 31 int n,f[maxn]; 32 string s; 33 bool flag=0; 34 int main() 35 { 36 freopen("input.txt","r",stdin); 37 freopen("output.txt","w",stdout); 38 cin>>s; 39 s=s+s; 40 n=s.length()>>1; 41 memset(f,128,sizeof(f)); 42 for0(i,2*n-1) 43 if(s[i]=='2')f[i]=1,flag=1; 44 else if(s[i]=='3') 45 { 46 if(i==0)continue; 47 f[i]=f[i-1]+1; 48 } 49 int ans=0; 50 for0(i,2*n-1)ans=max(ans,min(f[i],n)); 51 memset(f,128,sizeof(f)); 52 for3(i,2*n-1,0) 53 if(s[i]=='2')f[i]=1,flag=1; 54 else if(s[i]=='3') 55 { 56 if(i==0)continue; 57 f[i]=f[i+1]+1; 58 } 59 for0(i,2*n-1)ans=max(ans,min(f[i],n)); 60 if(!flag)printf("TvT\n"); 61 else 62 { 63 printf("2"); 64 for1(i,ans-1)printf("3"); 65 printf("\n"); 66 } 67 return 0; 68 }