励志用尽量少的代码做高效表达。


题目(提交)链接→UVa-1368


思路:

DNA序列:按列遍历,记录每一列出现次数最多(若同样多,则字典序最小)的字母,录入s串累加。
距离:重新遍历,录入出现次数比最多次数少(若相等,则字典序较大的)的次数,录入sum累加

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {int n; cin >> n; while(n--) {int m, n;  cin >> m >> n;char c[m][n];                       for(int i = 0; i < m; i++)                                    //输入 for(int j = 0; j < n; j++) cin >> c[i][j];int mark;                                                    //mark+'0'记录出现次数最多且最小的字符 int found = 0;                                             //记录出现次数最多的位数 int a[26];string s;int sum = 0;memset(a,0,sizeof(a));for(int i = 0; i < n; i++) {          //i代表列for(int j = 0; j < m; j++)          //j代表行  ,先遍历行,将每行出现次数最多的字符找出,存入s串 a[(c[j][i]-'A')]++;for(int k = 0; k < 26; k++)                                 //求最短汉明序列的字符。 if(a[k] > found) { //出现次数最多或 一样多,但较小。 found = a[k];                                    mark = k;}for(int k = 0; k < 26; k++)                                //求次数 if((a[k] < found) || ((a[k] == found) && (mark < k))) sum+= a[k];s += (mark+'A');                                          //将符合要求的字符录入s串 mark = 0;                                                   //置0环节 found = 0;memset(a,0,sizeof(a));}cout << s << endl << sum << endl;}return 0;}

二刷:

回过头来又刷了一遍, 结合网上的讨论成果, 有了些新的感悟。

改进:
1. 在一段代码中同时求出了DNA序列与hamming距离。
2. 使用map容器对‘T’‘A’‘G’‘C’与其次数做映射,求解更方便。
3. 时间复杂度由O(52*m*n)降低到了O(4*m*n)。

理论上应该可以将时间复杂度降低到O(mn),做法是:在输入DNA串的同时,用二维数组存储每个字符出现的次数, 以Max数组按列比较 ,并记录其最大值即可。
但需要同时维护一个二维数组和一个一维数组的空间规模, 并不划算。


代码展示

#include<bits/stdc++.h>
using namespace std;
int main() {int T; cin>>T; while(T--) {int m, n; cin>>m>>n;string input[m];for(int i = 0; i < m; i++) cin>>input[i];  //输入map<char, int>um; //存储m个字符串中相同位置出现的字符及其对应的次数int Hamming = 0; //存储Hamming距离和for(int i = 0; i < n; i++) {for(int j = 0; j < m; j++) ++um[input[j][i]];char MAX = 'A';for(auto&j : um)     //查找出现次数最多的字符if(j.second > um[MAX]) MAX=j.first;putchar(MAX);   //输出出现次数最多的字符Hamming += m-um[MAX];um.clear();     //清空map } cout << '\n' << Hamming << '\n'; }
return 0; }

日拱一卒,功不唐捐。

21行代码AC——习题3-7 DNA序列(UVa-1368)_解题报告相关推荐

  1. 21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告

    题意: 输入若干行代码,要求各列单词的左边界对齐且尽量靠左,单词之间至少要空一格,每个单词不超过80个字符,每行不超过180个字符,一共最多1000行. 思路: 1.输入内容存入二维数组 2.找出每列 ...

  2. 15行代码AC——习题5-5 复合词(Compound Words, UVa 10391)——解题报告

    励志用少的代码做高效的表达 题目(提交)链接→UVA-10391 本题实质是#include<string>头文件的substr()字符串分割函数与#include<algorith ...

  3. 11行代码AC——比紫书优化,例题2-3 近似计算——解题报告

    励志用更少的代码做高效的表达 题意: 计算π/4 = 1 - 1/3 + 1/5 - 1/7 + -,直到最后一项小于10^-6. 思路分析: 本题很简单,因此计算重心从解题转化为优化. 本题为重复计 ...

  4. 21行代码AC——例题5-2 Ducci序列(Ducci Sequence,UVa1594)——解题报告

    励志用少的代码做高效的表达. 题目(提交)链接→UVa-1594 本题为水题,因此侧重点从解题转变为优化. 注意点: 1.下一轮是按照上一轮的每个数做运算,但下一轮每次运算都会改变数列的值,造成运算不 ...

  5. 21行代码AC——HDU1106 排序

    Problem Description 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整 ...

  6. 28行代码AC——习题3-12 浮点数(UVA 11809 - Floating-Point Numbers)——解题报告

    励志用少的代码做高效的表达 题目(提交)链接→UVA-11809 算是个数学题吧,虽然在AOAPC上面给放到象征水题的第三章里面了. 这个题基本就是帮着你复习了一遍浮点数的存储方式了.浮点数在计算机里 ...

  7. 22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-1595 思路: 此题本质是一道笛卡尔坐标系上的对称性问题. 判定性问题:由于只要能判别图像是否左右对称即可,无需确认关于哪条垂直线对称,那 ...

  8. 15行代码AC——习题3-3 数数字 (UVa1225,Digit Counting)

    大意: 把n(n<=10000)个整数顺序写在一起,求0~9分别出现多少次 Sample Input 2 3 13 Sample Output 0 1 1 1 0 0 0 0 0 0 1 6 2 ...

  9. 26行代码AC——习题3-2 分子量 (UVa1586,Molar Mass)——解题报告

    大意: 给出分子式,式中只包含以下四种元素.求分子量. C:12.01 H: 1.008 O: 16.00 N: 14.01 Sample Input 4 C C6H5OH NH2CH2COOH C1 ...

最新文章

  1. 现在的编译器还需要手动展开循环吗_性能 - 如果有的话,循环展开仍然有用吗?...
  2. 了解jvm对编程的帮助_这是您对社会责任编程的了解
  3. Spring基础专题——第九章(基础注解编程——上)
  4. try-catch-finally中return的执行情况
  5. 适合0基础的web开发系列教程-web 存储
  6. 博途v15做上位画面_realme真我V15评测:当科技遇上国潮 越级还能这么玩
  7. maven项目配置Jetty服务器
  8. 在清理卫生的时候面对奖状和过去的日记本应该怎么处理
  9. 安装 | Matlab2022a下载及新功能一览
  10. 37.cgi网页交互
  11. ServletActionContext.getRequest().getSession() 和 ActionContext.getContext().getSession()的区别
  12. MySQL MVCC 概述
  13. 验证控件;正则表达式;
  14. 骚年快醒醒,你适合转行做前端吗?
  15. Qt Quick编程(1)——QML的核心部分ECMAScript
  16. 光盘放进电脑读不出来_U盘插入电脑读不出来?学会这3招,轻松解决USB无法读取的问题...
  17. oracle解析关闭,读书笔记:深入解析oracle-第一章 数据库的启动和关闭
  18. PPT(二)-让您的幻灯片“炫”起来!
  19. 尼奥智能陪伴机器人如何绑定设备_巴巴腾 智能陪护儿童机器人A3,为儿童专业定制的小伙伴...
  20. 周志华 机器学习ppt

热门文章

  1. 记一次失败的Windows环境编译Nginx源码
  2. 消息中间件(Kafka/RabbitMQ)收录集
  3. 堡垒之夜一年内增1亿玩家、YouTube为支持AV1的8K电视提供8K内容、Elon Musk要过极简生活等...
  4. 音视频技术开发周刊 82期
  5. LiveVideoStack秋季招聘(编辑、会务运营、项目经理)
  6. Java基础之正则表达式
  7. nginx之rtmp模块引用计数设计
  8. C++封装、继承、多态
  9. Mysql的几个字符串函数【concat、concat_ws、group_concat】
  10. 【案例分析】分布式系统的接口幂等性设计!