【UVA1368】DNA序列
题目大意
输入 个长度均为 的 DNA 序列,求一个 DNA 序列,该序列能满足到 个序列的总距离最小。
两个等长字符串的距离定义为字符不同的的位置的个数,例如, 和 的距离为 (第 、第 位置的字符不相同)。
数据范围:
。
解题思路
简单的模拟题,本蒟蒻在模拟赛中玄学的 TLE
(90pts),
然而,把数组开大就 AC
了。
由于字符串只包含 ,,, 四个字符,记录一下不就结束了吗?
但另一个坑点是:
如果有多个答案,输出字典序最小的那个。
这就要用几个 if
判断了。
最最最最后一个坑点:千万不能用 cin
和 cout
!!!
AC CODE
#include<bits/stdc++.h>
using namespace std;
#define int long long
int T, n, m;
char cc[51][2001];
signed main()
{
scanf("%lld", &T);
while(T--)
{
int ans = 0;
scanf("%lld%lld", &n, &m);
for(int i = 1; i <= n; ++i)
{
scanf("%s", cc[i]);
}
for(int i = 0; i < m; ++i)
{
int a = 0, b = 0, c = 0, d = 0;//ACGT
int mmax = 0;
for(int j = 1; j <= n; ++j)
{
if(cc[j][i] == 'T') a++;
if(cc[j][i] == 'A') b++;
if(cc[j][i] == 'G') c++;
if(cc[j][i] == 'C') d++;
}
mmax = max(a, max(b, max(c, d)));
//cout<<mmax<<endl;
if(mmax == b) putchar('A'), ans = ans + a + c + d;
else if(mmax == d) putchar('C'), ans = ans + a + b + c;
else if(mmax == c) putchar('G'), ans = ans + a + b + d;
else putchar('T'), ans = ans + b + c + d;
}
printf("\n%lld\n", ans);
}
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122155