#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int m,n; //m为dna序列的个数,n为dna序列的长度
const int maxlength=1000;
/*
思路:既然是总Hanmming距离最小,
那么就字符串的每个字符与其他DNA序列的Hamming距离尽量小
*/
int MAX(int a,int b,int c,int d)
{
int temp;
temp=max(a,b);
temp=max(temp,c);
temp=max(temp,d);
return temp;
}
int main()
{
int T; //测试样例个数
cin>>T;
while(T--)
{
cin>>m>>n;//输入m,n;
string dna[m];
string ans;
int count=0; //错误的个数
for(int i=0;i<m;i++)
{
cin>>dna[i];
}
for(int i=0;i<n;i++)
{//长度
int a=0,t=0,g=0,c=0; //分别对应每个核酸的个数
for(int j=0;j<m;j++)
{//把所有字符串的第i个字符遍历一遍,判断哪个核酸最多
if(dna[j][i] == 'A')
{
a++;
}
else if(dna[j][i] == 'T')
{
t++;
}
else if(dna[j][i] == 'G')
{
g++;
}
else if(dna[j][i] == 'C')
{
c++;
}
}
if(a == m || t == m || c == m || g == m )
{//这就表明在第i个位置的字符全是一样的
if(a == m)
{
ans=ans+'A';
}
else if(t == m)
{
ans=ans+'T';
}
else if(c == m)
{
ans=ans+'C';
}
else if(g == m)
{
ans=ans+'G';
}
}
else
{//第i个位置存在字符不同,此时要找字符最多的那一个作为共识字符串的成员
int temp;
//count++; //错误数+1;
temp=MAX(a,t,c,g);//找出四个中最大的那个
//存在特殊情况,即至少两个相同且同为最大值,此时要找字典序最小的
int same=0,aa=0,tt=0,cc=0,gg=0; //判断是否存在至少两个相同且互为最大值
if(temp == a)
{
same++;
aa++;
}
else if(temp == t)
{
same++;
tt++;
}
else if(temp == c)
{
same++;
cc++;
}
else if(temp == g)
{
same++;
gg++;
}
if(same == 1)
{//此时就一个字符个数最多
if(temp == a)
{
ans=ans+'A';
count=count+t+c+g;
}
else if(temp == t)
{
ans=ans+'T';
count=count+a+c+g;
}
else if(temp == c)
{
ans=ans+'C';
count=count+t+a+g;
}
else if(temp == g)
{
ans=ans+'G';
count=count+t+c+a;
}
}
else if(same>1)
{//此时多个字符个数相同且均为最大值,此时要找其中字典序最小的字符
if(aa == 1)
{
ans=ans+'A';
count=count+t+c+g;
}
else if(cc == 1)
{
ans=ans+'C';
count=count+t+a+g;
}
else if(gg == 1)
{
ans=ans+'G';
count=count+t+c+a;
}
else if(tt == 1)
{
ans=ans+'T';
count=count+a+c+g;
}
}
}
}
cout<<ans<<endl;
cout<<count<<endl;
}
return 0;
}
uva1368 wa了,想知道错哪了,求告诉下
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
0条回答 默认 最新
悬赏问题
- ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
- ¥15 Python卡尔曼滤波融合
- ¥20 iOS绕地区网络检测
- ¥15 python验证码滑块图像识别
- ¥15 根据背景及设计要求撰写设计报告
- ¥20 能提供一下思路或者代码吗
- ¥15 用twincat控制!
- ¥15 请问一下这个运行结果是怎么来的
- ¥15 单通道放大电路的工作原理
- ¥30 YOLO检测微调结果p为1