uva1368DNA consensus string统计
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93800#problem/G
题意:输入一个由ATCG组成的表格,表格中每一列出现次数最多的字母组成一行新的字符串,距离为将每一列出现次数不是最多的字母出现的次数总和,输出字符串和距离。
思路:将数据存入二维数组,将每一列ATCG出现的次数计算出来,将出现次数最多的字母放入新的字符型数组中,将每一列除了出现次数最多的字母出现的次数加起来。
#include<iostream> using namespace std; int main() { int t; cin>>t; while(t--) { int m,n; cin>>m>>n; char x[m][n]; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { cin>>x[i][j]; } } int dis=0; char midl[n]; int p=0; for(int j=0;j<n;j++) { int a=0,t=0,c=0,g=0; for(int i=0;i<m;i++) { if(x[i][j]=='A')a++; if(x[i][j]=='C')c++; if(x[i][j]=='G')g++; if(x[i][j]=='T')t++; } int ma; char mid; ma=a;mid='A'; if(c>ma){ma=c;mid='C';} if(g>ma){ma=g;mid='G';} if(t>ma){ma=t;mid='T';} midl[p]=mid; p++; if(mid=='A')dis=dis+t+c+g; if(mid=='T')dis=dis+a+c+g; if(mid=='C')dis=dis+a+t+g; if(mid=='G')dis=dis+a+t+c; } for(int i=0;i<n;i++) { cout<<midl[i]; } cout<<endl<<dis<<endl; } return 0; }
第一次没有注意相同时按字典序输出。