light OJ -DNA Prefix (字典树)
来源:互联网 发布:成都生活家装饰 知乎 编辑:程序博客网 时间:2024/05/21 06:45
题目链接:
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121897#problem/G
题目大意:
寻找所给字符串的 前缀*出现次数 的最大值
题解:
字典树,v[u]为结点出现次数,存字符串后利用搜索不断遍历所有有字母的点,找到最大值。此题因为只有4个字母,所以字典树的宽度应为4,如果为26会超出内存。
AC代码:
#include <cstdio>#include <algorithm>#include <cstring>#include <cctype>#include <iostream>using namespace std;const int maxnode = 2500500;const int sigma = 4;int ch[maxnode][sigma],v[maxnode],sz,ans;int u;int maxx;int numb[maxnode];struct trie{ trie() { sz=1; memset(v,0,sizeof v); memset(ch[0],0,sizeof ch[0]); } int idx(char c)//如果不这样存的话会爆内存 { if(c == 'C') return 1; else if(c == 'G') return 2; else if(c == 'T') return 3; return 0; } void insert(char* s) { int l =strlen(s); u=0; for(int i=0;i<l;i++) { int c = idx(s[i]); if(!ch[u][c]) { v[sz] = 0; memset(ch[sz],0,sizeof ch[sz]); ch[u][c] = sz++; //cout << ch[u][c] <<endl; } u = ch[u][c]; v[u] ++; } } void solve(int u, int d)//搜索寻找最大值,d为前缀长度 { ans = max(ans, d * v[u]); for (int i = 0; i < 4; i++) { if (ch[u][i]) solve(ch[u][i], d + 1); } }}T;int n,m;char c[105];int main(){ int TTT; int cnt = 1; cin >> TTT; while(TTT--) { int nnn; cin >> nnn; while(nnn--) { scanf("%s" , c); T.insert(c); } ans = 0; T.solve(0,0); printf("Case %d: %d\n", cnt++, ans); sz=1; memset(v,0,sizeof v); memset(ch[0],0,sizeof ch[0]); } return 0;}
0 0
- light OJ -DNA Prefix (字典树)
- DNA Prefix (字典树)
- DNA Prefix--字典树
- LightOJ 1224 DNA Prefix(字典树)
- lightOJ 1244 DNA Prefix (字典树)
- LightOJ 1224 - DNA Prefix(字典树)
- Light OJ 1114 Easily Readable 字典树
- 字典树(需要删除操作)——DNA Prefix ( LOJ 1224 )
- DNA Prefix (Light_1224) 动态字典树 + 模板题
- Light OJ 1334 1334 Genes in DNA(KMP)
- Light OJ 1334 Genes in DNA KMP+DP
- Light OJ 1334 Genes in DNA (扩展KMP)
- DNA序列(OJ)
- Light OJ 1110 - An Easy LCS (LCS+字典序最小路径记录)
- 华为OJ(DNA序列)
- Light OJ 1129 (Tire树)
- 【light oj】树的直径
- light oj(简化复杂度)
- SQL— CONCAT(字符串连接函数)
- ImagePicker
- 挑战程序设计竞赛---POJ.3233
- POJ 3617 Best Cow Line 【贪心】
- Jre和JDK的区别
- light OJ -DNA Prefix (字典树)
- JSX,Html语法需注意的部分
- CentOS7关闭SELinux
- ROS学习需要看的网络教程_整理
- 面试题39:二叉树的深度
- JavaScript--05 DOM基础 12.1
- Java 值交换详解
- [Leetcode]204. Count Primes
- bnuoj 1068 比赛安排