https://vjudge.net/problem/UVA-1368
按字典序求每个字在当前位置的个数;把个数多的字典序小的放入一个数组,最后输出;
#include <iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
int _;
scanf("%d",&_);
while(_--){
int flag[4][1005];
memset(flag,0,sizeof(flag));
int m,n;
scanf("%d%d",&m,&n);
getchar();
char c;
for(int i=1;i<=m;i++){
for(int j=0;j<n;j++){
c=getchar();
if(c=='A')flag[0][j]++;
else if(c=='C')flag[1][j]++;
else if(c=='G')flag[2][j]++;
else flag[3][j]++;
}
getchar();
}
// for(int i=0;i<n;i++){
// cout<<flag[0][i]<<' '<<flag[1][i]<<' '<<flag[2][i]<<' '<<flag[3][i]<<endl;
// }
int maxx=-1,ind,ans=0;
char s[1005];
for(int i=0;i<n;i++){
ind=0,maxx=-1;
for(int j=0; j<4; j++) {
if(maxx<flag[j][i]){
maxx=flag[j][i];
ind=j;
}
}
ans=ans+(m-maxx);
if(ind==0)s[i]='A';
else if(ind==1)s[i]='C';
else if(ind==2)s[i]='G';
else s[i]='T';
}
for(int i=0;i<n;i++){
printf("%c",s[i]);
}
printf("\n");
printf("%d\n",ans);
}
return 0;
}
/*
3
5 8
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
4 10
ACGTACGTAC
CCGTACGTAG
GCGTACGTAT
TCGTACGTAA
6 10
ATGTTACCAT
AAGTTACGAT
AACAAAGCAA
AAGTTACCTT
AAGTTACCAA
TACTTACCAA
*/