1 solutions
-
0
C++ :
#include<stdio.h> #include<malloc.h> int sum1=1,sum2=1,h1=1,h2=1; void find1(int i,char a[],int n,int h1){ int first; if(sum1==n-1) return ; if(i==n-1) first=0; else first=i+1; if(a[i]=='w'&&h1==1) a[i]=a[first]; if(a[i]=='w'&&a[i-1]=='w'&&h1!=1) a[i]=a[first]; if(a[first]=='w') a[first]=a[i]; if(a[i]==a[first]) {sum1++;find1(first,a,n,h1++);} if(a[i]!=a[first]) return; } void find2(int i,char a[],int n,int h2){ int first,last; last=i-1; if(i-1<0) last=n-1; if(sum1+sum2==n) return; if(i==0) first=n-1; else first=i-1; if(a[i]=='w'&&h2==1) a[i]=a[first]; if(a[i]=='w'&&a[last]=='w'&&h1!=1) a[i]=a[first]; if(a[first]=='w') a[first]=a[i]; if(a[i]==a[first]) {sum2++;find2(first,a,n,h2++);} if(a[i]!=a[first]) return; } int main() {int n; while(scanf("%d",&n)!=EOF){ getchar(); int max=2; char *a,*b; a=(char *)malloc(n*sizeof(char)); b=(char *)malloc(n*sizeof(char)); scanf("%s",a); for(int i=0;i<n;i++) b[i]=a[i]; for(int i=0;i<n;i++){ find1(i,a,n,1); if(i>0) find2(i-1,a,n,1); else find2(n-1,a,n,1); if(sum1+sum2>max) max=sum1+sum2; sum1=sum2=h1=h2=1; for(int j=0;j<n;j++) a[j]=b[j]; } printf("%d\n",max); } return 0; }
- 1
Information
- ID
- 16483
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By