Trie树 hdu3460 Ancient Printer
来源:互联网 发布:网络电子游戏官网 编辑:程序博客网 时间:2024/04/30 13:34
大概的意思就是模拟输入顺序,,然后最少要按多少次键
仔细分析一下题目就可以发现:
1.输出的次数就等于n
2.如果建一个Trie树,因为最后可以保留一个单词而没必要删除它,所以除了这个单词的节点只被输入了,其他的节点都被输入了一次,和删除了一次
所以就能得到答案 Trie树节点数*2-最长单词长度+n
#include<map>#include<set>#include<cmath>#include<queue>#include<cstdio>#include<string>#include<vector>#include<cstring>#include<iostream>#include<algorithm>#include<functional>using namespace std;typedef long long LL;typedef pair<int, int> PII;const int MX = 5e5 + 5;const int TX = 5e5 + 5;const int INF = 0x3f3f3f3f;struct Node { int num; int Next[26]; Node() { memset(Next, 0, sizeof(Next)); }} node[TX];int T_rear;int trie_node() { node[++T_rear] = Node(); return T_rear;}void trie_add(int root, char*S) { int L = strlen(S); int p = root; for(int i = 0; i < L; i++) { int id = S[i] - 'a'; if(!node[p].Next[id]) { node[p].Next[id] = trie_node(); } p = node[p].Next[id]; } node[p].num++;}int main() { int n; char S[100]; while(~scanf("%d", &n)) { T_rear = 0; int Max = 0; int root = trie_node(); for(int i = 1; i <= n; i++) { scanf("%s", S); Max = max(Max, (int)strlen(S)); trie_add(root, S); } printf("%d\n", n + (T_rear - 1) * 2 - Max); } return 0;}
0 0
- Trie树 hdu3460 Ancient Printer
- hdu3460 Ancient Printer(字典树)
- 【字母树+贪心】【HDU3460】【Ancient Printer】
- hdu3460 Ancient Printer
- HDU3460-Ancient Printer
- HDU3460——Ancient Printer
- hdu 3460 Ancient Printer trie字典树
- 【trie】hdu 3460 Ancient Printer
- HDOJ-3460Ancient Printer(Trie)
- hdu3460(Trie树)
- hdu 3460 Ancient Printer(贪心 or Trie树)
- hdu 3460 Ancient Printer(trie tree)
- hdu 字典树Ancient Printer
- HDU_3460 Ancient Printer 【字典树】
- Ancient Printer
- Ancient Printer 字典树 hdu 3460
- 【字典树】hdu 3460 Ancient Printer
- hdu 3460 Ancient Printer (字典树)
- unbuntu下如何更新adobe flash插件
- HDU 2444
- Android四大组件之三:ContentProvider数据共享
- TCP/IP解析(一):TCP/IP的工作方式
- 二项式、杨辉三角、组合数三者之间关系
- Trie树 hdu3460 Ancient Printer
- 队列笔记
- 周赛一 ACdream 1196 模拟题
- 为别人撑伞(深度好文)
- HDU 3478
- 第一章 绪论
- JS将一个十进制转换成二进制
- 生成所有的出栈序列 (回溯法)
- myql5.7.7优化配置参数