您的位置:首页 > 其它

DNA Consensus String UVA - 1368

2018-02-05 17:07 399 查看
题目大意:

给定m个长度为 n 的DNA序列,求一个 DNA 序列,使其到所有序列的总hamming距离尽量小,如有多解,输出最小解。(两个等长字符串的hamming距离等于字符不同的位置个数)

思路:因为每个DNA序列都是相同长度的,所以可以枚举每一位DNA码,然后用贪心的思想选取出现次数最多的,如果有两个最多的,按要求用字典序小的。

ac代码:

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<iomanip>
#define ll long long

using namespace std;

int m,n,d[105];
string s[105];

void solve() {
int ans = 0;
for(int i = 0; i < n; i++) {
int MAX = -1,id;
memset(d, 0, sizeof(d));
for(int j = 0; j < m; j++) {
int tem = s[j][i] - 'A';
d[tem] ++;
if(d[tem] > MAX) {
MAX = d[tem];
id = tem;
} else if(d[tem] == MAX&& tem < id) id = tem;
}
ans += m - MAX;
printf("%c",id + 'A');
}
printf("\n%d\n",ans);
}

int main()
{
int t;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&m,&n);
for(int i = 0; i < m; i++) cin >> s[i];
solve();
}

}


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: