zoukankan      html  css  js  c++  java
  • UVa 1588

    //UVa 1588 - Kickdown
    //一次循环,分类讨论
    //有BUG,,,不要看了,,仅供收藏。。。欢迎大神提出意见。。。
    #include<stdio.h>
    int main(){
    	freopen("x3.11.in","r",stdin);   
    	//freopen("x3.11.out","w",stdout);
    //DATE IN
    	char ch, must = 1;			//ch为临时输入,must处理掩码得到0101
    	bool a[2][100];				//用于存放每次的2组数据
    	int count = 0, is = 0, lo[2],ca = 0; 	//count记录字符串长度并用lo[]存储,ca为答案个数
    	while((ch = getchar()) != EOF){
    		if(ch == '
    '){
    			lo[is++] = count;
    			putchar('
    ');
    			//printf("size:%d
    ",lo[is-1]);
    			count = 0;
    		}else {
    			if(ch == ' ')continue;
    			else{
    				a[is][count] =  !(ch & must);
    				printf("%d ",a[is][count]);
    				count++;
    			}
    		}
    		
    	//DATE DO(此处计算并输出答案,并在最后重置is)
    		if(is == 2){
    			int re , m = 0, iss = 0,i = lo[0];
    			//re 为重复,m向右移,iss 为开关,第i次
    			while(1){
    				if(i > 0)i--;else m++;
    				for(int j = 0; ; j++){
    					if(!m && (a[0][i+j]+a[1][j+m])==2)break;
    					if(!m && (i+j)==(lo[0]-1)){re = j+1;break;}
    					if(!i && j==(lo[0]-1)){re = lo[0];break;}
    					if(!i && (j+m+1)==lo[1]){re >= lo[1]?iss=1:re = lo[1]-m;break;}
    					if(!i && m==lo[1]){re = 0;break;}
    				}
    				if(re==lo[0] || re==lo[1] || iss==1 || re == 0){
    					printf("case%d:%d
    ",++ca,lo[0]+lo[1]-re);
    					break;
    				}
    			}
    		//continue
    			is = 0;
    		}
    	}
    	return 0;
    }
    
    /*
    UVa1588测试数据
    case1:10
    case2:4
    case3:7
    case4:8
    case5:10
    case6:8
    case7:15
    case8:
    */
    


    以下为测试数据:

    3.11.in

    2 2 1 2 1 1 2
    2 1 1 2 1 1 2 1 1 2
    2 2
    2 1 1 2
    2 2 2 1
    2 2 2 1
    2 2 2 2
    2 1 1 1 1 2
    2 1 1 2 1 1 2 1 1 2
    2212112
    1 2 1 2 1 2 1 2
    2 1 2 1 2 1 2 1 
    2 2 1 1 2 2 1 1 2 2 
    2 1 2 1 2
    

    //AC1
    #include<stdio.h>
    #include<string.h>
    const int maxn=100;
    char a[maxn+1],b[maxn+1];
    int n1,n2;
    int min(const int &i,const int &j){
        return i<j?i:j;
    }
    int minLen(char *s1,char *s2,int &n){
    	int sumLen=n1+n2, minn=min(n1,n2), len=sumLen;
    	for(int i = 0; i < n; i++){
    		int ok = 1, fix = min(n-i,minn);
    		for(int j=0; j < fix; j++) 
    			if(s1[i+j]=='2'&&s2[j]=='2'){
    				ok=0; break;
    			}
            if(ok&&len>sumLen-fix)len=sumLen-fix;
        }
        return len;
    }
    int main(){
        while(scanf("%s%s",&a,&b)==2){
            n1=strlen(a),n2=strlen(b);
            printf("%d
    ",min(minLen(a,b,n1),minLen(b,a,n2)));
        }
    }

    //AC2
    #include<stdio.h>
    #include<string.h>
    char a[110],b[110];
    int main(){
        while(scanf("%s%s",a,b) != EOF){
            int i,j,t,n1,n2;
            int temp,len1,len2;
            i=j=t=0;
            n1=strlen(a);
            n2=strlen(b);
    		//
            while(j<n1 && i<n2){
                if(a[j]+b[i]-96<=3)i++,j++;
                else t++,i=0,j=t;
            }
            len1=n1+n2-i;
            i=j=t=0;
    		//
            while(j<n2&&i<n1){
                if(a[j]+b[i]-96<=3)i++,j++;
                else t++,i=0,j=t;
            }
            len2=n1+n2-i;
            printf("%d
    ",len1 < len2 ? len1 : len2 );
        }
        return 0;
    }
    

    以下为测试数据2:

    2212112
    2112112112
    22
    2112
    2221
    2221
    2222
    211112
    2112112112
    2212112
    12121212
    21212121
    2211221122
    21212
    



  • 相关阅读:
    遗忘
    2008年第一篇1.15
    键盘对应值
    油田开采基础知识
    最近
    oracle中lob数据的操作
    [转]大数据能做什么,大数据和云是不是一回事?
    [转]从这些方面判断一家公司的好坏
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    谈创新
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444950.html
Copyright © 2011-2022 走看看