UVaOJ10602 - Editor Nottoobad
2013-05-23 19:26
281 查看
[title3]
10602 - Editor Nottoobad[/title3]
Time limit: 3.000 seconds
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 oneuses “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 |
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 smallLatin 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, youcan output one of them.
Sample Input | Sample Output |
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 |
Problem author: Andrew Stankevich
Problem translation: Dmytro Chernysh
Problem solution: Andrew Stankevich, Dmytro Chernysh
#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; }
相关文章推荐
- uva10602 Editor Nottoobad
- uva:10602 - Editor Nottoobad(贪心)
- uva 10602 Editor Nottoobad
- UVA - 10602 Editor Nottoobad 贪心+暴力
- uva 10602 Editor Nottoobad(排序)
- uva 10602 Editor Nottoobad(排序)
- Editor Nottoobad-10602
- uva 10602 Editor Nottoobad(字符串 + 排序)
- uva - 10602 - Editor Nottoobad(贪心)
- UVA 10602 Editor Nottoobad(贪心)
- UVA 10602 Editor Nottoobad(贪心)
- UVA - 10602 Editor Nottoobad
- UVa 10602 Editor Nottoobad (等价转换思想)
- UVa10602 - 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 贪心