hdu - 3460 - Ancient Printer(Trip)
来源:互联网 发布:高中语文知乎 编辑:程序博客网 时间:2024/05/18 03:28
题意:给出N个由小写字母组成的队名,用一台古老的打印机这些队名打印出来,问最少要敲几次键盘(队名之间不用按输入顺序),这台打印机只能执行以下3种操作:
1.在现有基础上的末尾继续输入小写字母;
2.删除最后一个字母;
3.打印现有串。
(1 <= N <= 10000, 队名长度 <= 50)
——>>组织好Trip,记录总结点数sz,每个结点到根结点的距离,得到距离根结点最远的结点的距离Max,那么答案为2 * sz + N - Max。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxw = 50 + 10;int N;char name[maxw];struct node{ int dis; node *next[26]; node(){ dis = 0; memset(next, 0, sizeof(next)); }};struct Trip{ node *root; int Max; int sz; Trip(){ root = new node; Max = -1; sz = 0; } int idx(char c){ return c - 'a'; } void insert(char *s){ node *t = root; int len = strlen(s), i; for(i = 0; i < len; i++){ int c = idx(s[i]); if(!t->next[c]){ t->next[c] = new node; sz++; } t->next[c]->dis = t->dis + 1; t = t->next[c]; } Max = max(Max, t->dis); } void solve(){ printf("%d\n", 2 * sz + N - Max); }};int main(){ while(scanf("%d", &N) == 1){ Trip trip; for(int i = 0; i < N; i++){ scanf("%s", name); trip.insert(name); } trip.solve(); } return 0;}
- hdu - 3460 - Ancient Printer(Trip)
- hdu 3460 Ancient Printer
- hdu 3460 Ancient Printer
- HDU 3460 Ancient Printer
- hdu 3460 Ancient Printer
- hdu 3460 Ancient Printer
- HDU 3460 Ancient Printer
- HDU 3460Ancient Printer
- hdu 3460 Ancient Printer
- HDU 3460 Ancient Printer
- 【HDU】 3460 Ancient Printer
- 【trie】hdu 3460 Ancient Printer
- hdu 3460 Ancient Printer(贪心 or Trie树)
- hdu-3460-Ancient Printer(贪心+字典树)
- Ancient Printer 字典树 hdu 3460
- 【字典树】hdu 3460 Ancient Printer
- hdu 3460 Ancient Printer (字典树)
- hdu 3460 Ancient Printer 字典树
- COM+ 进程内服务器接口指针的传递
- UVA 10817 Headmaster's Headache
- 打开word2007时总是出现配置进度,怎么解决?
- C/C++中extern关键字详解
- 测试不等于NULL的错误指针
- hdu - 3460 - Ancient Printer(Trip)
- 为什么移动Web应用程序很慢(译)
- SELinux架构
- AS3.0实现播放视频flv
- 11.2.0.3 - OCM: ORA-12012 and ORA-29280
- iPhone 和Android应用,特殊的链接:打电话,短信,email;
- C++中的函数指针和函数对象总结
- JSP页面显示绝对路径图片问题
- mac下goEngine使用