原题链接:https://cn.vjudge.net/problem/UVA-1368

大概题意:

输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量小。两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的Hamming距离为2(左数第1, 4个字符不同)。

输入整数m和n(4≤m≤50, 4≤n≤1000),以及m个长度为n的DNA序列(只包含字母A,C,G,T),输出到m个序列的Hamming距离和最小的DNA序列和对应的距离。如有多解,要求为字典序最小的解。例如,对于下面5个DNA序列,最优解为TAAGATAC。

TATGATAC

TAAGCTAC

AAAGATCC

TGAGATAC

TAAGATGT

分析:我的思路是从0-n-1同时遍历所有字符串,然后每一个访问,我们对字符进行计数,然后看一下哪个字符出现的次数是最多的。像上面的例子,我们从0号位置开始,0号位置,从上往下有:T T A T T,我们就记录T-4次,A-1次,然后发现T出现的次数是最多的,所以最优解的第0号位置就是T。

然后我们怎么算总距离呢?也是上面的例子,我们在每一次遍历的时候,先全部加起来,然后再减去我们选择的最优解。比如0号位置,T-4,A-1,我们就先加5,然后减去4,得到1。相当于所有字符串在这个位置(0号位),为这个距离,贡献了1.

接下来是AC代码:

#include<iostream>
#include<cstring>
#include<map>
#include<vector>
using namespace std;map<char,int> cnt;int main()
{
//  freopen("in.txt","r",stdin);int T;cin>>T;while(T--){int m,n;cin>>m>>n;string s[m];//保存每一次测试用例的所有字符串 for(int i=0; i<m; i++){cin>>s[i];}int allsum=0;//最后要输出的 “距离 ” vector<char> ans;//最后要输出的最优解 for(int j=0; j<n; j++){//对于每一列,先存到计数器里面 cnt.clear();for(int i=0; i<m; i++){cnt[s[i][j]]++;}//再找一下计数器里面谁最大 map<char,int>::iterator i=cnt.begin();char c=i->first;int sum=i->second;for(i=cnt.begin(); i!=cnt.end(); i++){allsum+=i->second;if(i->second>sum){sum=i->second;c=i->first;}}allsum-=sum;ans.push_back(c);}//输出 for(int i=0; i<ans.size(); i++){cout<<ans[i];//输出字符串 }cout<<endl;cout<<allsum<<endl;}return 0;
}

这里我用map来表示字符和计数器之间的映射,如果不会map,可以用一个数组,比如a[0]表示‘A’出现的次数,a[1]表示‘C’出现的次数,然后要注意字典序顺序,这里map可以很好的解决字典序问题是因为map会自动排序。然后从begin(),遍历到最后一个元素就好了。

Over.

DNA序列 UVa1368相关推荐

  1. 21行代码AC——习题3-7 DNA序列(UVa-1368)_解题报告

    励志用尽量少的代码做高效表达. 题目(提交)链接→UVa-1368 思路: DNA序列:按列遍历,记录每一列出现次数最多(若同样多,则字典序最小)的字母,录入s串累加. 距离:重新遍历,录入出现次数比 ...

  2. 3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)

    输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量 小. 两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的 Hamming距离为 ...

  3. 求最小Hamming距离的DNA序列

    提示:两个等长字符串的Hamming距离,等于两个字符串相同的位置中,字符不同的个数.(如ACGT和GCGA的Hamming距离为2) 问题: TATGATAC TAAGCTAC AAAGATCC T ...

  4. UA MATH567 高维统计III 随机矩阵12 整数环上的区间的应用:DNA序列突变点侦测的统计量及假设检验

    UA MATH567 高维统计III 随机矩阵12 整数环上的区间的应用:拐点侦测的统计量及假设检验 整数环上的区间作为随机变量的下标 最大值的概率不等式 应用:DNA序列突变点侦测 整数环上的区间作 ...

  5. Leetcode 187.重复的DNA序列

    重复的DNA序列 所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮 ...

  6. A1051. DNA序列

    问题描述 人类基因组计划的第一阶段于2000年6月26日胜利结束,我国的科研工作者圆满地完成了其中的1%的测序工作. 众所周知,对于任意两个人来说,他们的染色体上的DNA序列大部分是相同的(否则就不是 ...

  7. python文件处理,将DNA序列转换为RNA序列

    1 #!/usr/bin/python 2 #-*- coding:utf-8 -*- 3 "将DNA序列转换为RNA序列,即将T转换为U即可,利用字符串的replace方法" 5 ...

  8. DNA序列编码中Hairpin的定义和计算

    DNA序列编码中Hairpin的定义和计算 觉得有用的话,欢迎一起讨论相互学习~ 参考文献 [1] 张凯. DNA计算核酸编码优化及算法设计[D]. 2008. [2] Shin, Soo Yong ...

  9. 基因家族进化分析之DNA序列批量获取

    使用方法参考: 基于全基因组的基因家族分析(3):SlNRAMP家族基因CDS和Genomic DNA序列获取 Gene序列要获得的ID号不仅仅是seqid,而且还需要在染色体上的位置信息--起始和终 ...

最新文章

  1. Carrier frequency 和 EARFCN的关系
  2. 成绩从大到小排序c语言,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
  3. android viewflipper图片轮播,android开发:ViewFlipper实现图片轮播
  4. sklearn之kmean(无监督聚类)
  5. Emeditor 常用的正则表达式
  6. 【渝粤教育】国家开放大学2018年春季 0275-21T内科护理学 参考试题
  7. csol永恒python怎样施展技能_pycharm辅助学习使用debug功能
  8. Sqlmap命令讲解
  9. 静态IP、动态IP、ADSL拨号和DNS这几者你分得清吗?
  10. 同事把实数作为 HashMap 的key,领导心态崩了
  11. mysql免安装版linux_Linux下配置免安装版的MySQL
  12. CreateProcess创建新的进程
  13. 虚拟机----Linux
  14. 基于JavaWeb点餐系统
  15. 大话数据结构(一)数据结构相关概念
  16. WMS系统后端开发-货位管理
  17. 个人信息泄露 大病难治
  18. C++ 内嵌匿名函数的使用
  19. 禁止计算机系统,如何禁止计算机被远程控制
  20. 大数据_MySQL之DQL(数据查询语言)

热门文章

  1. Neil Young:谈游戏ARPDAU及榜单排名意义
  2. 2020-10-16 js实现模拟双色球摇号
  3. Ubuntu16.04安装ROS kinetic以及标定工具Kalibr流程
  4. 最全各种浏览器网页星号点号密码查看最简方法(技术小白也能看懂使用)
  5. 计算机领域的道德模范,2015-2016年学校道德模范董敏事迹
  6. DMIPS, TOPS, FLOPS, FLOPs, GMACs, FMA
  7. 三棱锥之刻(求三棱锥中心球与表面覆盖面积之和)
  8. C++ Primer Plus 第4章
  9. Android开发中的drawable-(hdpi,mdpi,ldpi)和WVGA,HVGA,QVGA的区别以及联系
  10. 2020湖南大学ACM新生杯题解- D Treasure Cave