UVa 10602 - Editor Nottoobad
来源:互联网 发布:linux内存管理 编辑:程序博客网 时间:2024/06/05 00:15
链接:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&page=show_problem&problem=1543
类型:贪心
原题:
Company Macrohard has released it’s new version of editor Nottoobad, which can understand a few voice commands. Unfortunately, there are only two voice commands that it can understand – “repeat the last word”, “delete the last symbol”. However, when one uses “repeat the last word” the editor inserts a blank that separates the words. But the company claims that it is possible to type much faster – simply by less number of presses. For example, such a phrase like “this thin thing” requires only 6 presses of the keyboard.
Action
Number
of presses
Content of the document
Press "this"
4
This
Say “repeat the last word”
0
this this
Say “delete the last symbol”
0
this thi
Press "n"
1
this thin
Say “repeat the last word”
0
this thin thin
Press "g"
1
this thin thing
In order to increase the popularity of it’s product the company decided to organize a contest where the winner will be a person who types a given number of words with minimum number of presses. Moreover, the first word must be typed first, and all the others can be typed in arbitrary order. So, if words “apple”, “plum” and “apricote” must be typed, the word “apple” must be typed first, and the words “plum” and “apricote” can be switched. And the most important for you – you are going to take part in the contest and you have a good friend in the company, who told you the word which will be used in the contest. You want be a winner J, so you have to write a program which finds the order of the words, where the number of presses will be minimum.
Input
The first line of the input contains the T (1≤T≤15) the number of test cases. Then T test cases follow. The first line of each test contains a number N (1≤N≤100) – the number of words that must be pressed. Next N lines contain words – sequences of small Latin letters, not longer than 100 symbols. Remember that the first word must be pressed first!
Output
The first line of the output contains number X - the minimum number of presses, which one has to do in order to type all the words using editor Nottoobad. Next N lines contain the words in that minimum order. If there are several solutions, you can output one of them.
样例输入:
3
3
this
thin
thing
4
popcorn
apple
apricote
plum
2
hello
hello
样例输出;
6
this
thin
thing
21
popcorn
plum
apricote
apple
5
hello
hello
分析与总结:
贪心题,每次直接遍历选择一个可以减少输入次数最少的单词即可。
代码:
/* * UVa: 10602 - Editor Nottoobad * Result: Accept * Time: 0.020s * Author: D_Double */#include<iostream> #include<cstdio> #include<string> #include<algorithm> #include<cstring>#define MAXN 120 using namespace std; struct Node{ int no; char word[110]; friend bool operator < (const Node &a, const Node &b){ return a.no < b.no; }}arr[MAXN];int main(){ int T, N; char str[110]; scanf("%d", &T); while(T--){ scanf("%d",&N); for(int i=0; i<N; ++i){ scanf("%s",arr[i].word); arr[i].no = -1; } arr[0].no = 1; int ans=strlen(arr[0].word); int rank=1, last=0; while(rank < N){ int t=-1, cnt=0; for(int i=0; i<N; ++i)if(arr[i].no==-1){ if(t==-1){ t=i; if(arr[i].word[0]==arr[last].word[0]){ for(int j=0; j<strlen(arr[i].word)&&j<strlen(arr[last].word); ++j){ if(arr[i].word[j]!=arr[last].word[j]) break; else ++cnt; } } } else{ int tmp=0; for(int j=0; j<strlen(arr[i].word)&&j<strlen(arr[last].word); ++j){ if(arr[i].word[j]!=arr[last].word[j]) break; else ++tmp; } if(tmp > cnt){ t=i; cnt=tmp; } } } ans += (strlen(arr[t].word) - cnt); arr[t].no = rank++; last = t; } sort(arr, arr+N); printf("%d\n", ans); for(int i=0; i<N; ++i) puts(arr[i].word); } return 0;}
—— 生命的意义,在于赋予它意义。
原创 http://blog.csdn.net/shuangde800 , By D_Double (转载请标明)
- UVa 10602 - Editor Nottoobad
- UVa 10602 - Editor Nottoobad
- uva 10602 - Editor Nottoobad
- UVA 10602 - Editor Nottoobad
- UVA 10602 - Editor Nottoobad
- uva 10602 Editor Nottoobad
- UVA 10602 EDITOR NOTTOOBAD
- UVa 10602 - Editor Nottoobad
- UVA - 10602 Editor Nottoobad
- UVA - 10602 Editor Nottoobad
- uva 10602 Editor Nottoobad
- UVA 10602 - Editor Nottoobad
- UVA - 10602 Editor Nottoobad
- uva 10602 Editor Nottoobad(排序)
- EDITOR NOTTOOBAD - UVa 10602 贪心
- UVA 10602 Editor Nottoobad(贪心)
- UVa 10602 Editor Nottoobad (等价转换思想)
- uva - 10602 - Editor Nottoobad(贪心)
- UVa 10718 - Bit Mask
- java.text.Collator 类的具体使用方法
- 【线段树】 hdu4325 Flowers
- hdu2734 Quicksum (水)
- UVa 10400 - Game Show Math
- UVa 10602 - Editor Nottoobad
- hdu 2265 Encoding The Diary (水)
- aspxmenu 动态菜单
- hdu 2113 Secret Number (水)
- UVa 714 - Copying Books,最大值最小化问题
- 输出10000 以内的所有回文数
- UVa 10954 - Add All
- hdu 2036 改革春风吹满地 (水)
- 天气加时钟