【题解】LA 3602【DNA Consensus String】

分析

这题就是给你一段序列,然后要求和所有最相似的。
和UVa 1368重题

代码

#include<cstdio>
#include<cstring>

int main(){
    int T;scanf("%d",&T);
    while(T--){
        int n,m;scanf("%d %d",&n,&m);
        char DNA[n][m + 1];
        for(int i = 0;i < n;i++) scanf("%s",DNA[i]);
        int list[4];
        int num = 0,num1;
        for(int i = 0;i < m;i++){
            memset(list,0,sizeof(list));
            for(int j = 0;j < n;j++){
                if(DNA[j][i] == 'A') list[0]++;
                else if(DNA[j][i] == 'C') list[1]++;
                else if(DNA[j][i] == 'G') list[2]++;
                else list[3]++;
            }
            int delta = 0,ans;
            for(int k = 0;k < 4;k++){
                if(list[k] > delta) ans = k,delta = list[k],num1 = n - list[k];
            }
            if(ans == 0) printf("A");
            else if(ans == 1) printf("C");
            else if(ans == 2) printf("G");
            else printf("T");
            num += num1;
        }
        printf("\n%d\n",num);
    }

    return 0;
}