• USACO Section 1.1 Broken Necklace


    花大力气写的模拟。。。等搜索练好了再回来做,另外把测试数据发一下。。

    /*
      ID:linyvxi1
      PROG:beads
      LANG:C++
    */
    #include <stdio.h>
    #include <string.h>
    int main()
    {
    	FILE*	fin=fopen("beads.in","r");
    	FILE*	fout=fopen("beads.out","w");
    
    	int n;
    	char str[400];
    	fscanf(fin,"%d",&n);
    	fscanf(fin,"%s",str);
    	bool flag1=false,flag2=false;
    	int i=0,j=strlen(str)-1;
    	char stat=str[0];
    	//while(i<=j&&(str[i]==str[i+1]||str[i+1]=='w'||str[i]=='w'))
    	while(i<=j&&(str[i]==stat||str[i]=='w'))
    		i++;
    	stat=str[strlen(str)-1];
    //	while(j>=0&&(str[j]==str[j+1]||str[j]=='w'||str[j+1]=='w'))
    	while(j>=0&&(str[j]==stat||str[j]=='w'))
    		j--;
    	int max,temp=0;
    	if(i>=j){
    		fprintf(fout,"%d\n",strlen(str));
    		return 0;
    	}//如果全相同。。。
    	else	max=i+strlen(str)-1-j;
    	for(i=1;i<=strlen(str)-1;i++){
    		int n=i,m=i-1,k;
    		k=i-1;
    		while(str[k]=='w')
    			k++;
    		stat=str[k];
    //		stat=str[i-1];
    		while(m>=0&&(str[m]==stat||str[m]=='w'))//标志位
    			m--;//左边是i-1-m个
    		k=n;
    		while(str[k]=='w')
    			k++;
    		stat=str[k];
    		while(n<=strlen(str)-1&&(str[n]==stat||str[n]=='w'))
    			n++;//右边是n-i个
    		if(m!=-1&&n!=strlen(str)){//如果都没数到头
    			int num=i-1-m+n-i;
    			if(num>max)
    				max=num;
    		}
    //		stat=str[i-1];
    		else if(m==-1&&n!=strlen(str)){//如果左边到头了右边没到头
    			k=i-1;
    			while(str[k]=='w')
    				k++;
    			stat=str[k];
    			if(str[strlen(str)-1]==stat||str[strlen(str)-1]=='w'){//如果左边还能继续往下走
    				m=strlen(str)-1;
    				while(str[m]==stat||str[m]=='w')
    					m--;//右边是n-i个
    				//int sum=n-i+1+i-0+1+strlen(str)-1-m+1;
    				int sum=n-i+strlen(str)-1-m+i;
    				if(sum>max)
    					max=sum;
    			}
    			else {
    				int sum=i+n-i;
    				if(sum>max)
    					max=sum;
    			}
    		}
    //		stat=str[i];
    		else if(m!=-1&&strlen(str)==n){//如果左边没到头右边到头了
    			k=i;
    			while(str[k]=='w')
    				k++;
    			stat=str[k];
    			if(str[0]=='w'||str[0]==stat){//如果右边还能继续走下去
    				n=0;
    				while(str[n]==stat||str[n]=='w')
    					n++;//又走了n个
    //				int sum=n-0+1+i-1-m+1+strlen(str)-1-i+1;
    				int sum=n+i-1-m+strlen(str)-1-i+1;
    				if(sum>max)
    					max=sum;
    			}
    			else{
    //				int sum=i-1-m+1+strlen(str)-1-i+1;
    				int sum=i-1-m+strlen(str)-i;
    				if(sum>max)
    					max=sum;
    			}
    		}
    		else{//两边都到头了
    			max=strlen(str);
    			break;
    		}
    	}
    	fprintf(fout,"%d\n",max);
    }
    

    Here are the test data inputs:

    ------- test 1 ----
    29
    wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
    ------- test 2 ----
    3
    rrr
    ------- test 3 ----
    77
    rwrwrwrwrwrwrwrwrwrwrwrwbwrwbwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwr
    ------- test 4 ----
    17
    wwwwwwwwwwwwwwwww
    ------- test 5 ----
    50
    bbrrrbrrrrrrrrbrbbbrbrrbrrrrbbbrbrbbbbbrbrrrbbrbbb
    ------- test 6 ----
    8
    rrwwwwbb
    ------- test 7 ----
    200
    rrrrrrrrrrrrrrrrrrrrbbbbbbbbbbbbbbbbbbbbrrrrrrrrrrrrrrrrrrrrbbbbbbbbbbbbbbbbbbbbrrrrrrrrrrrrrrrrrrrrbbbbbbbbbbbbbbbbbbbbrrrrrrrrrrrrrrrrrrrrbbbbbbbbbbbbbbbbbbbbrrrrrrrrrrrrrrrrrrrrbbbbbbbbbbbbbbbbbbbb
    ------- test 8 ----
    350
    rrbbrbbbwbwwbwbbbbwwrrbbwbrwbrwbbbrbrwrwbrwwwrrbbrrwrbbrwbwrwwwrbrwwwwwrwbwwwrrbrrbbbrbrbbbrbbbrbbwbbbbbrbrrbrwwbrrrrwbwrwrbbwbwrbrbrwwbrrbwbrwwbwwwbrbwrwbwbrbbbwrbwwrrrbwbwbbbbbrrwwwrbrwwrbbwrbbrbbrbwrrwwbrrrbrwbrwwrbwbwrrrbwrwrrbrbbwrwrbrwwwrwbwrrwwwwrrrwrrwbbwrwwrwrbwwbwrrrrbbwrbbrbwwwwwbrbbrbbrbrwbbwbwwbbbbbwwwrbwwbbbwrwwbbrrwrwbwrrwwwrrrwrrwww
    ------- test 9 ----
    333
    rwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwbrwb
    
  • 相关阅读:
    http协议基础(三)几种数据传输方式
    http协议基础(二)请求和响应报文的构成
    http协议(一)基础知识
    性能测试常见术语浅析
    TPS和QPS定义以及影响TPS的因素
    JMeterPlugin性能监控
    jmeter压测之 监控--nmon
    对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
    C# AES的128位、192位、256位加密
    C# 处理base64 以及base64的原理分析
  • 原文地址:https://www.cnblogs.com/yangce/p/2225994.html
Copyright © 2020-2023  润新知