loj 1224 - DNA Prefix
题目链接
题目描述很简单 有n和DNA序列,求出他们中公共前缀长度和有相同公共前缀DNA序列乘积的最大值。
If we take the subset {ACGT} then the result is 4 (4 * 1), if we take {ACGT, ACGTGCGT, ACGCCGT} then the result is 3 * 3 = 9 (since ACG is the common prefix), if we take {ACGT, ACGTGCGT, ACCGTGC, ACGCCGT} then the result is 2 * 4 = 8.
这个就是英文的描述,很简单,就不翻译了。
思路:
这个题目明显用trie做,我是这样想的,用trie存储所有的DNA序列,然后每个节点有个cnt值,表示的是存储以该节点结尾的DNA序列的数目。
在输入过程中便开始建树的过程,最后,在查询结果的时候我用了递归的方式,代码比较好写,也容易理解。
还有最后一点,虽然我们在竞赛中很少使用指针,但涉及到指针,在用完后一定要释放,否则会MLE,我就MLE两次。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;struct trie
{struct trie *next[5];int cnt;
} *p;trie* newtrie()
{trie *q = new trie();for (int i = 0; i < 4; i++)q->next[i] = NULL;q->cnt = 0;return q;
};
void insert(char *str, trie *root)
{p = root;while (*str){int pos;if (*str == 'A')pos = 0;else if (*str == 'C')pos = 1;else if (*str == 'G')pos = 2;elsepos = 3;if (!p->next[pos]){p->next[pos] = newtrie();p = p->next[pos];p->cnt++;}else{p = p->next[pos];p->cnt++;}str++;}
}int maxnum(struct trie *q, int d)
{int maxn = d * q->cnt;for (int i = 0; i < 4; i++){if (q->next[i]){maxn = max(maxn, maxnum(q->next[i], d+1));}}return maxn;
}
void moveit(trie *root)
{if (root == NULL)return;for (int i = 0; i < 4;i++){moveit(root->next[i]);}free(root);
}int main()
{int t, n;char s[55];scanf("%d",&t);for(int k = 1; k <= t; k++){trie *root = newtrie();scanf("%d",&n);while (n--){scanf("%s",s);insert(s, root);}printf("Case %d: %d\n", k, maxnum(root, 0));moveit(root);}return 0;
}
转载于:https://www.cnblogs.com/xindoo/archive/2013/04/20/3595113.html
loj 1224 - DNA Prefix相关推荐
- 二代测序linux软件,二代测序数据分析软件包大全
二代测序数据分析软件包大全 Integrated solutions*CLCbio Genomics Workbench-de novoand reference assembly of Sanger ...
- struts2+spring3+hibernate4
//web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=" ...
- DNA序列 LOJ NOIP模拟赛 D1T1 字符串哈希
字符串哈希 上代码 #include<cstdio> #include<cstring> #include<string> #include<iostream ...
- hbase_异常_03_java.io.EOFException: Premature EOF: no length prefix available
一.异常现象 更改了hadoop的配置文件:core-site.xml 和 mapred-site.xml 之后,重启hadoop 和 hbase 之后,发现hbase日志中抛出了如下异常: ...
- 【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query
A non-empty zero-indexed string S is given. String S consists of N characters from the set of upper- ...
- MPB:广东生态土壤所孙蔚旻组-DNA稳定同位素示踪与宏基因组单菌草图组装联用技术...
为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...
- DNA 4. SCI 文章中基因组的突变信号(maftools)
点击关注,桓峰基因 桓峰基因 生物信息分析,SCI文章撰写及生物信息基础知识学习:R语言学习,perl基础编程,linux系统命令,Python遇见更好的你 87篇原创内容 公众号 突变信号(Muta ...
- 【生物信息】ecDNA染色体外环状DNA的识别——AmpliconArchitect算法
ecDNA染色体外环状DNA的识别 写在前面 实验环境 原理简介 算法流程 实现细节 区间搜索 区间重排,分区和可视化 断点图的构造 环分解 实验步骤 数据的获取 质控分析 conda的安装 AA算法 ...
- usaco ★Longest Prefix 最长前缀
★Longest Prefix 最长前缀 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列 28 分解成较短的(称之为元素的)序列很感兴趣. 如果一个集合 P 中 ...
- 区块链技术如何改变我们对DNA的看法
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 试想一下,有人得到了你的一些最私人的信息,并用它来攻击你,窃取你的身份,实施诈骗.这对于你来说特别有压力,对吧?那么,倘 ...
最新文章
- pythonselenium浮动框_python上selenium的弹框操作实现
- c_str()和strcasecmp
- Python3 实现用户登陆,输入三次密码
- 利用Skywalking-netcore监控你的应用性能
- LINQ系列:Linq to Object排序操作符
- 增量式pid_PID 基础知识汇总
- select weui 动态加载数据_浪尖以案例聊聊spark3的动态分区裁剪
- group by with cube
- Bind 一些有趣的东西 【未完待续】
- 汉诺塔问题(C语言实现)
- 选频滤波器 matlab,MATLAB低通滤波器选频实现
- 学习网站及编程电子书下载网站
- 3dmax渲染卡顿崩溃怎么办?(二)
- linux怎么运行idl,科学网—在Scientific linux 7上安装idl83 - 姜小川的博文
- USB大容量存储设备禁用后恢复不了问题解决方案
- arcgis图层合并裁剪
- python中字典keys、values、items的使用_Python学习笔记字典之keys()、values()和 items()方法...
- JavaScript 实现延迟合并处理任务
- nginx中的sub_filter
- 蛋白质二级结构预测Linux,哪些蛋白质二级结构预测软件可以批量使用?