1 solutions

  • 0
    @ 2025-11-5 15:10:53

    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