UVa 1368 - DNA Consensus String

1938 ワード

全部で一日以上やったのに、昨日は問題を出さなかったので、この状態はよくありません.本題はやはり場所カードがあって、アルゴリズムの方面ではありませんて、やはりgetcharに対して();この問題は辞書の順序の最小の解を探すアルゴリズムについて、私のやり方はやはり比較的に巧みで、突然すぐにある考えで、ふだんやはり多くの思考の習慣を身につけなければならないと思います.最后に、UVaが问题を提出する时にプログラムの中にコードの注釈があるとCEを判定されるようで、何度も试してみましたが、これは后で注意しましょう!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char a[2000][2000];
char b[2000];
int num[2000][4];
int main()
{
    int i,j,k,r,s,t,m,n,h,sum;
    scanf("%d",&h);
    for(k=1; k<=h; k++)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(num,0,sizeof(num));
        scanf("%d %d",&m,&n);
        getchar();
        for(i=0; i<m; i++)
            gets(a[i]);
        //getchar();
        for(i=0; i<m; i++)
            for(j=0; j<n; j++)
            {
                if( a[i][j] == 'A' )
                    num[j][0]++;
                else if( a[i][j] == 'C' )
                    num[j][1]++;
                else if( a[i][j] == 'G' )
                    num[j][2]++;
                else if( a[i][j] == 'T' )
                    num[j][3]++;
            }
         //printf("%d
",num[0][0]); t=0; for(i=0; i<n; i++) { int max=-1000; for(j=3; j>=0; j--) if( num[i][j] >= max ) { max=num[i][j]; r=j; } if(r == 0) b[t++] = 'A'; else if(r == 1) b[t++] = 'C'; else if(r == 2) b[t++] = 'G'; else if(r == 3) b[t++] = 'T'; } sum=0; for(i=0; i<m; i++) for(j=0; j<n; j++) if(a[i][j] != b[j]) sum++; printf("%s
%d
",b,sum); } return 0; }