【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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话