UVA-1368 DNA Consensus String(思路)
题目:
题意:
题目虽然比较长,但读完之后题目的思路还是比较容易想出来的。
给出m个长度为n的字符串(只包含‘A’、‘T’、‘G’、‘C’),我们的任务是得出一个字符串,要求这个字符串与给出的m个字符串的汉明距离的和最小,输出这个字符串和最小的汉明距离和。
如果有多个符合题意的字符串,就输出字典序最小的那个字符串。
思路:
1、首先给出汉明距离的定义:
汉明距离表示相同长度的字对应位不同的数量。
例如:
10100和11000的汉明距离就是2.
2、对m个字符串的每一位分别统计‘A’、‘T’、‘G’、‘C’的个数,则答案字符串这一位的字符就是m个字符串中这一位上个数最多的那个字符。这样保证答案字符串的这一位的字符和给出的所有字符串有最大的字符相同数,所以得出的汉明距离就会最小。
3、得到答案字符串之后,与每一个给出的字符串进行比较得到汉明距离的和。
代码:
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define FRE() freopen("in.txt","r",stdin)
using namespace std;
typedef long long ll;
const int maxn = 5e3+;
int mp[][];
char str[][]; int toTransform(char ch){
int res;
switch(ch){
case 'A':
res = ;
break;
case 'C':
res = ;
break;
case 'G':
res = ;
break;
case 'T':
res = ;
break;
}
return res;
} char toChar(int x){
char ch;
switch(x){
case :
ch = 'A';
break;
case :
ch = 'C';
break;
case :
ch = 'G';
break;
case :
ch = 'T';
break;
}
return ch;
} int toJudgeMaxPos(int r){
int idx = ,mmax = -inf;
for(int i = ; i<; i++){
if(mmax < mp[r][i]){
mmax = mp[r][i];
idx = i;
}
}
return idx;
} int toCountRes(char* sstr,int m,int n){
int res = ;
for(int i = ; i<n; i++){
for(int j = ; j<m; j++){
if(sstr[i] != str[j][i])
res++;
}
}
return res;
} int main(){
int T,m,n;
scanf("%d",&T);
while(T--){
scanf("%d%d",&m,&n);
for(int i = ; i<m; i++){
scanf("%s",str[i]);
} memset(mp,,sizeof(mp));
for(int i = ; i<n; i++){//统计m个字符串相同位上A、T、G、C的个数
for(int j = ; j<m; j++){
int idx = toTransform(str[j][i]);
mp[i][idx]++;
}
}
// for(int i = 0; i<m; i++){
// printf("%d %d %d %d\n",mp[i][0],mp[i][1],mp[i][2],mp[i][3]);
// }
char ans[];
for(int i = ; i<n; i++){//找出该位上相同个数最多的那个字符,并赋值给ans字符串
int pos = toJudgeMaxPos(i);
char temp = toChar(pos);
ans[i] = temp;
}
ans[n] = '\0';
// cout<<ans<<endl; int res = toCountRes(ans,m,n);//获取汉明距离
printf("%s\n%d\n",ans,res);
}
return ;
}
/*
PutIn:
3
5 8
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
4 10
ACGTACGTAC
CCGTACGTAG
GCGTACGTAT
TCGTACGTAA
6 10
ATGTTACCAT
AAGTTACGAT
AACAAAGCAA
AAGTTACCTT
AAGTTACCAA
TACTTACCAA
PutOut:
TAAGATAC
7
ACGTACGTAA
6
AAGTTACCAA
12
*/
UVA-1368 DNA Consensus String(思路)的更多相关文章
- uva 1368 DNA Consensus String
这道题挺简单的,刚开始理解错误,以为是从已有的字符串里面求最短的距离,后面才发现是求一个到所有字符串最小距离的字符串,因为这样的字符串可能有多个,所以最后取最小字典序的字符串. 我的思路就是求每一列每 ...
- 【每日一题】UVA - 1368 DNA Consensus String 字符串+贪心+阅读题
https://cn.vjudge.net/problem/UVA-1368 二维的hamming距离算法: For binary strings a and b the Hamming distan ...
- UVa 3602 - DNA Consensus String 水题 难度: 0
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- 贪心水题。UVA 11636 Hello World,LA 3602 DNA Consensus String,UVA 10970 Big Chocolate,UVA 10340 All in All,UVA 11039 Building Designing
UVA 11636 Hello World 二的幂答案就是二进制长度减1,不是二的幂答案就是是二进制长度. #include<cstdio> int main() { ; ){ ; ) r ...
- uva1368 DNA Consensus String
<tex2html_verbatim_mark> Figure 1. DNA (Deoxyribonucleic Acid) is the molecule which contains ...
- DNA Consensus String
题目(中英对照): DNA (Deoxyribonucleic Acid) is the molecule which contains the genetic instructions. It co ...
- 紫书第三章训练1 E - DNA Consensus String
DNA (Deoxyribonucleic Acid) is the molecule which contains the genetic instructions. It consists of ...
- 【习题 3-7 UVA - 1368 】DNA Consensus String
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举每一位字母是什么. 从小到大枚举. 然后计算每一位的总贡献是多少. 取最小的那个输出. [代码] #include <bi ...
- DNA Consensus String UVA - 1368
题目链接:https://vjudge.net/problem/UVA-1368 题意:给出一组字符串,求出一组串,使与其他不同的点的和最小 题解:这个题就是一个点一个点求,利用桶排序,求出最多点数目 ...
随机推荐
- 【OI新闻】2016.10.09
号外: [头条]今天OI神犇光勋和原子城po ke,Happy Birthday!
- memcached知识点梳理
Memcached概念: Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HASH表,该表以Key-valu ...
- 排名Top 100的Java类库
和去年一样,排名第一的类库,依旧是JUnit.基于它扩展的 JUnit Runner 占据第二名的位置,甚至是较旧的 junit.framework 此次也在第三名的位置.也就是说JUnit包揽了前三 ...
- WP8 中使用HTML Agility Pack与友盟分享SDK遇到的 System.Xml.XPath加载问题
今晚在尝试使用友盟最新的社交分享SDK时,按照官方Demo,并未做多少多少改动,就是去除了对微信.脸书和推特的分享.然后运行之后就一直报错 : {System.IO.FileLoadException ...
- [App Store Connect帮助]六、测试 Beta 版本(4.2) 管理 Beta 版构建版本:查看构建版本状态和指标
必要职能:“帐户持有人”职能.“管理”职能.“App 管理”职能.“开发者”职能或“营销”职能.请参见职能权限. 在首页上,点按“我的 App”,选择您的 App,然后在工具栏中点按“TestFlig ...
- js计算每月的天数
function getDaysOfMonth(year, month) { month = parseInt(month); switch (month) { case 1: case 3: cas ...
- 406 Queue Reconstruction by Height 根据身高重建队列
假设有打乱顺序的一群人站成一个队列. 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数. 编写一个算法来重建这个队列.注意:总人数少于1100人.示 ...
- 235 Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最近公共祖先
给定一棵二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 详见:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-s ...
- .net面试题 2016
经典面试题2016——50题 1.面向对象语言具有——继承性——,——封装性——,——多态性—— 继承性:就是让一个类型的对象拥有另一个类型的对象的属性的方法.继承后,子类拥有父类的属性和方法. 封装 ...
- WebForm vs MVC
What is ASP.NET? ASP.NET is a Microsoft’s Web application framework built on Common language runtime ...