UVa 10602 Editor Nottoobad (等价转换思想)
来源:互联网 发布:君智咨询 知乎 编辑:程序博客网 时间:2024/06/05 03:32
10602 - Editor Nottoobad
Time limit: 3.000 seconds
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 editorNottoobad. Next N lines contain the words in that minimum order. If there are several solutions, you can 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
观察到:无论选择哪个单词开始,在贪心后的结果,都是一样的。
证明:首先最少的press次数肯定是在输出排序后的字符串后得到的。基于这个顺序,我们有:对于两个首字母不同的单词,二者在press时都要完整地敲出来,press次数必为二者长度之和;而对于两个首字母相同的单词,press次数必为(在贪心的思想下)不相同的部分之和。所以二者的顺序是无关的。
完整代码:
/*0.009s*/#include<cstdio>#include<cstring>#include<cstdlib>#define sf scanf#define pf printfchar word[105][105];int cmp(const void* a, const void* b){return strcmp((char*)a, (char*)b);}int main(){int t, n, sum, i, j;sf("%d", &t);while (t--){sf("%d\n", &n);for (i = 0; i < n; ++i)gets(word[i]);qsort(word, n, sizeof(word[0]), cmp);sum = strlen(word[0]);for (i = 1; i < n; ++i){for (j = 0; word[i][j] && word[i - 1][j] && word[i][j] == word[i - 1][j]; ++j);sum += strlen(word[i]) - j;}pf("%d\n", sum);for (i = 0; i < n; ++i)puts(word[i]);}return 0;}
- 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
- uva 10602 Editor Nottoobad(排序)
- EDITOR NOTTOOBAD - UVa 10602 贪心
- UVA 10602 Editor Nottoobad(贪心)
- uva - 10602 - Editor Nottoobad(贪心)
- 浅谈尾递归 转自豆瓣God-Mode
- 常用排序总结
- 基于STK的数据中继卫星与风云1号D星空地通信链路仿真
- 完全背包 多种解法 动态规划
- arp欺骗
- UVa 10602 Editor Nottoobad (等价转换思想)
- struts2的基础之Action
- 十五、动态链接库介绍以及静态库的编写
- 华容道
- assign、retain、copy的区别
- zen cart修改底部版权信息
- 用grunt-cmd-xxx构建seajs项目时,使用alias引发的BUG
- 名校握手中,未来更从容——安生国际课程中心南菁中学分部首传捷报
- 用Javascript评估用户输入密码的强度