您的位置:首页 > 其它

UVA - 1368 - DNA Consensus String

2018-02-05 20:26 351 查看
原命题链接:PDF/Vjudge

题意就是说,在输入的已知的m行的DNA中,依次找出每一位出现最多的字母,并且把每一位上与这个字母不同的字母个数记录下来,输出总的相异个数,若有多个符合条件的,输出字典序小的(从前往后扫描即可)。

这个如果有多个符合条件的的话,那么就选用当前来看字典序小的一个,这样一来,到最后保存的整个字符串一定是最小的。

代码如下:

#include <bits/stdc++.h>

using namespace std;
string dna[100];

int main()
{
int num;
cin >> num;
while (num--)
{
int m, n;
cin >> m >> n;
for (int i = 0; i < m; i++)
{
cin >> dna[i];
}
char ans[9000] = "";
sort(dna, dna + m);//貌似没什么用。。。可以删了。
int now = 0, sum = 0;
for (int i = 0; i < n; i++)
{
int a[100] = { 0 }, maxn = 0;
for (int j = 0; j < m; j++)
{
a[dna[j][i] - 'A']++;
maxn = max(maxn, a[dna[j][i] - 'A']);
}
//cout << maxn << " ";
for (int k = 0; k < 100; k++)
{
if (maxn == a[k])
{
maxn = k;
break;
}
}
//cout << maxn << endl;
ans[now++] = maxn + 'A';
for (int j = 0; j < m; j++)
{
if (ans[now - 1] != dna[j][i])
sum++;
}
}
ans[now] = 0;
cout << ans << endl << sum << endl;
}
//system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: