题目链接

题目描述很简单  有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相关推荐

  1. 二代测序linux软件,二代测序数据分析软件包大全

    二代测序数据分析软件包大全 Integrated solutions*CLCbio Genomics Workbench-de novoand reference assembly of Sanger ...

  2. struts2+spring3+hibernate4

    //web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=" ...

  3. DNA序列 LOJ NOIP模拟赛 D1T1 字符串哈希

    字符串哈希 上代码 #include<cstdio> #include<cstring> #include<string> #include<iostream ...

  4. hbase_异常_03_java.io.EOFException: Premature EOF: no length prefix available

    一.异常现象 更改了hadoop的配置文件:core-site.xml  和   mapred-site.xml  之后,重启hadoop 和 hbase 之后,发现hbase日志中抛出了如下异常: ...

  5. 【题解】【数组】【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- ...

  6. MPB:广东生态土壤所孙蔚旻组-DNA稳定同位素示踪与宏基因组单菌草图组装联用技术...

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  7. DNA 4. SCI 文章中基因组的突变信号(maftools)

    点击关注,桓峰基因 桓峰基因 生物信息分析,SCI文章撰写及生物信息基础知识学习:R语言学习,perl基础编程,linux系统命令,Python遇见更好的你 87篇原创内容 公众号 突变信号(Muta ...

  8. 【生物信息】ecDNA染色体外环状DNA的识别——AmpliconArchitect算法

    ecDNA染色体外环状DNA的识别 写在前面 实验环境 原理简介 算法流程 实现细节 区间搜索 区间重排,分区和可视化 断点图的构造 环分解 实验步骤 数据的获取 质控分析 conda的安装 AA算法 ...

  9. usaco ★Longest Prefix 最长前缀

    ★Longest Prefix 最长前缀 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列 28 分解成较短的(称之为元素的)序列很感兴趣. 如果一个集合 P 中 ...

  10. 区块链技术如何改变我们对DNA的看法

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 试想一下,有人得到了你的一些最私人的信息,并用它来攻击你,窃取你的身份,实施诈骗.这对于你来说特别有压力,对吧?那么,倘 ...

最新文章

  1. pythonselenium浮动框_python上selenium的弹框操作实现
  2. c_str()和strcasecmp
  3. Python3 实现用户登陆,输入三次密码
  4. 利用Skywalking-netcore监控你的应用性能
  5. LINQ系列:Linq to Object排序操作符
  6. 增量式pid_PID 基础知识汇总
  7. select weui 动态加载数据_浪尖以案例聊聊spark3的动态分区裁剪
  8. group by with cube
  9. Bind 一些有趣的东西 【未完待续】
  10. 汉诺塔问题(C语言实现)
  11. 选频滤波器 matlab,MATLAB低通滤波器选频实现
  12. 学习网站及编程电子书下载网站
  13. 3dmax渲染卡顿崩溃怎么办?(二)
  14. linux怎么运行idl,科学网—在Scientific linux 7上安装idl83 - 姜小川的博文
  15. USB大容量存储设备禁用后恢复不了问题解决方案
  16. arcgis图层合并裁剪
  17. python中字典keys、values、items的使用_Python学习笔记字典之keys()、values()和 items()方法...
  18. JavaScript 实现延迟合并处理任务
  19. nginx中的sub_filter
  20. 蛋白质二级结构预测Linux,哪些蛋白质二级结构预测软件可以批量使用?

热门文章

  1. 【心理咨询师考试笔记】基础理论(四)——发展心理学
  2. Python货币转换
  3. 逸仙电商将携Galenic法国科兰黎、EVE LOM参展进博会 | 进博会倒计时
  4. android 视频、图片混合轮播控件zbanner
  5. 吊打何同学?猛肝24小时,用6000元成本打造 AirDesk!
  6. 如何将wireshark抓包的中文恢复
  7. WPS vbe6ex.olb 不能加载
  8. 12306崩了,90%的人都用过这三款抢票工具
  9. python四子棋游戏
  10. 宏基因组公众号4年精华文章目录,收藏贴(2021.1更新)