集训队专题(1)1005 Ancient Printer
来源:互联网 发布:java http json接口 编辑:程序博客网 时间:2024/04/30 11:40
Ancient Printer
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 25 Accepted Submission(s) : 14
Problem Description
The contest is beginning! While preparing the contest, iSea wanted to print the teams' names separately on a single paper.
Unfortunately, what iSea could find was only an ancient printer: so ancient that you can't believe it, it only had three kinds of operations:
● 'a'-'z': twenty-six letters you can type
● 'Del': delete the last letter if it exists
● 'Print': print the word you have typed in the printer
The printer was empty in the beginning, iSea must use the three operations to print all the teams' name, not necessarily in the order in the input. Each time, he can type letters at the end of printer, or delete the last letter, or print the current word. After printing, the letters are stilling in the printer, you may delete some letters to print the next one, but you needn't delete the last word's letters.
iSea wanted to minimize the total number of operations, help him, please.
Unfortunately, what iSea could find was only an ancient printer: so ancient that you can't believe it, it only had three kinds of operations:
● 'a'-'z': twenty-six letters you can type
● 'Del': delete the last letter if it exists
● 'Print': print the word you have typed in the printer
The printer was empty in the beginning, iSea must use the three operations to print all the teams' name, not necessarily in the order in the input. Each time, he can type letters at the end of printer, or delete the last letter, or print the current word. After printing, the letters are stilling in the printer, you may delete some letters to print the next one, but you needn't delete the last word's letters.
iSea wanted to minimize the total number of operations, help him, please.
Input
There are several test cases in the input. Each test case begin with one integer N (1 ≤ N ≤ 10000), indicating the number of team names. Then N strings follow, each string only contains lowercases, not empty, and its length is no more than 50. The input terminates by end of file marker.
Output
For each test case, output one integer, indicating minimum number of operations.
Sample Input
2freeradiantfreeopen
Sample Output
21[hint]The sample's operation is:f-r-e-e-o-p-e-n-Print-Del-Del-Del-Del-r-a-d-i-a-n-t-Print[/hint]
Author
iSea @ WHU
Source
2010 ACM-ICPC Multi-University Training Contest(3)——Host by WHU
此题不仅考验大家的输入输出能力,还考验了大家的数学能力(小编我TT)。
直观是看,不难想到,没有共同前缀的词,肯定必须把整个词删掉重新输入,尔有共同前缀的词,肯定是先输入短的词,再输入长的词最节省步骤。所以,我们需要在输入的时候就找到最长的词,然后最后输入它。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;struct node{node *next[26];};node *root;int Maxsum;void Insert(char *s){ node *p = root; for(int i=0; s[i]; i++) { int k = s[i] - 'a'; if(!p->next[k]) { p->next[k] = new node(); Maxsum += 2; } p = p->next[k]; }}void Free(node *p){ for(int i=0; i<26; i++) if(p->next[i])Free(p->next[i]); free(p);}int main(){ int N; while(scanf("%d",&N)!=EOF) { char s[100]; int i,MaxLen = 0; root = new node(); Maxsum = N; for(i=0; i<N; i++) { scanf("%s",s); Insert(s); int len = strlen(s); MaxLen = max(MaxLen, len); } printf("%d\n", Maxsum - MaxLen); Free(root); } return 0;}
0 0
- 集训队专题(1)1005 Ancient Printer
- Ancient Printer
- hdu - 3460 - Ancient Printer(Trip)
- HDU 3069 Ancient Printer (模拟)
- 集训队专题(7)1005 kebab
- 集训队专题(9)1005 Stars
- 集训队专题(1)1001 Immediate Decodability
- 集训队专题(1)1002 统计难题
- 集训队专题(1)1003 Phone List
- 集训队专题(1)1006 单词数
- 集训队专题(1)1008 Repository
- 集训队专题(1)1009 T9
- hdu 3460 Ancient Printer
- hdu 3460 Ancient Printer
- HDU 3460 Ancient Printer
- hdu 3460 Ancient Printer
- hdu 3460 Ancient Printer
- HDU 3460 Ancient Printer
- Spring各个版本的下载地址
- JS post跨域及js类定义及使用
- php快速排序法
- 大数据性能调优之HBase的RowKey设计
- 新的开始
- 集训队专题(1)1005 Ancient Printer
- 运用人性,七情六欲聊运营
- NOIP 模拟练习题 收费站
- Android中attr自定义属性详解
- codeforces 616C The Labyrinth
- Linux 设备驱动中的并发控制
- 苹果电脑Finder中用户选项显示
- php命名空间的详细说明
- Android注解式开发BufferKnife的使用