2 条题解

  • 4
    @ 2024-12-21 20:21:39
    警示后人\Large\color{#FF0000}\textbf{警示后人}

    这道题如果不用链表写请务必注意边界,以下是错误示范:

    #include <bits/stdc++.h>
    using namespace std;
    int n,maxn=0;
    char a[351];
    int main()
    {
    	cin>>n>>a;
    	for (int i=0;i<n;i++){
    		int j=i-1:n-1,lsum1=0,rsum1=0,lsum2=0,rsum2=0;//这里有亿点问题
    		while (a[j]!='r' && j!=i){
    			lsum1++;
    			j--;
    			if (j<0){
    				j=n-1;
    			}
    		}
    		j=i;
    		while (a[j]!='r' && j!=((i!=0)?i-1:n-1)){
    			rsum1++;
    			j++;
    			if (j>n-1){
    				j=0;
    			}
    		}
    		j=i!=0?i-1:n-1;
    		while (a[j]!='b' && j!=i){
    			lsum2++;
    			j--;
    			if (j<0){
    				j=n-1;
    			}
    		}
    		j=i;
    		while (a[j]!='b' && j!=((i!=0)?i-1:n-1)){
    			rsum2++;
    			j++;
    			if (j>n-1){
    				j=0;
    			}
    		}
    		maxn=max(max(lsum1,lsum2)+max(rsum1,rsum2),maxn);
    	}
    	cout<<min(maxn,n);
    }
    
    • 0
      @ 2025-2-20 22:40:43

      比较菜,多指教

      #include <iostream>
      using namespace std;
      char s[710];//存放项链
      int n=0;//项链长度
      int dtmcol(char c)//判断颜色
      {
      	if(c=='b') return 1;
      	else return 2; 
       } 
      int main() {
      	int ans=0;
      	cin>>n>>s;//输入项链长度和项链
      	for(int i=0;i<n;i++) s[i+n]=s[i];//将项链变为2*n长度来处理环
      	for(int i=0;i<n;i++)
      	{
      		int l=i,r=i+n-1;
      		int cnt=0,left=0,right=0;//cnt==count
      		while(l<=r&& (s[l]=='w'||(left|dtmcol(s[l]))!=3))//向左枚举
      		{
      			if(s[l]!='w') left|=dtmcol(s[l]);
      			cnt++,l++;
      		}
      		while(l<=r&& (s[r]=='w'||(right|dtmcol(s[r]))!=3))//向右枚举
      		{
      			if(s[l]!='w') right|=dtmcol(s[r]);
      			cnt++,r--;
      		}
      		ans=ans>cnt?ans:cnt;//比较大小
      	} 
      	cout<<ans;//输出答案
      	return 0;
      }
      
      
      • 1

      信息

      ID
      6
      时间
      1000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      48
      已通过
      8
      上传者