uva 10602 Editor Nottoobad
2016-02-14 22:30
369 查看
原题:
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 its 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.
Sample Input
3
3
this
thin
thing
4
popcorn
apple
apricote
plum
2
hello
hello
Sample Output
6
this
thin
thing
21
popcorn
plum
apricote
apple
5
hello
hello
原题有点凌乱,链接
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1543
大意:
给你有个不完整的声控编辑器,只能执行如下指令:
1.重复上一个单词 2. 去掉最后一个字母
以上指令不需要按键
现在问你要打出给出的这些单词,最少按多少次按键。
解答:
这题好简单,直接对字符串排序,也就是字典序排序,有相同前缀的字符就会出现在一起。然后用当前字符串长度减去相邻前缀的长度就是要按键的数量。
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 its 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.
Sample Input
3
3
this
thin
thing
4
popcorn
apple
apricote
plum
2
hello
hello
Sample Output
6
this
thin
thing
21
popcorn
plum
apricote
apple
5
hello
hello
原题有点凌乱,链接
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1543
大意:
给你有个不完整的声控编辑器,只能执行如下指令:
1.重复上一个单词 2. 去掉最后一个字母
以上指令不需要按键
现在问你要打出给出的这些单词,最少按多少次按键。
#include <bits/stdc++.h> using namespace std; vector<string> vs; int PreLen(const string &a, const string &b) { int l = 0; while(l<a.size()&&l<b.size()) if(a[l] == b[l]) l++; else return l; return l; } int main() { ios::sync_with_stdio(false); int t,n,ans; cin>>t; while(t--) { cin>>n; vs.clear(); for(int i = 0 ;i < n ;i++) { string s; cin>>s; vs.push_back(s); } sort(vs.begin() , vs.end() ); ans = vs[0].size(); for(int i = 1; i < vs.size() ;i++) { int l = PreLen(vs[i-1] , vs[i]); ans += vs[i].size() - l; } cout<<ans<<endl; for(string s : vs) cout<<s<<endl; } return 0; }
解答:
这题好简单,直接对字符串排序,也就是字典序排序,有相同前缀的字符就会出现在一起。然后用当前字符串长度减去相邻前缀的长度就是要按键的数量。
相关文章推荐
- 一次请求执行两次同一html页面
- 自定义表单(一)--拖拽(JS版本)
- linux下awk的关联数组
- EventBus使用
- 【读书】一、面向对象的六大原则
- HTTP状态码
- 【数据结构】旋转数组中的最小数字
- Android的ArrayList和LinkedList在性能的区别有哪些?
- Spark源码分析之Job提交运行总流程概述
- PHP验证登录用户名和密码
- 面试笔试杂项积累-leetcode 301-305
- 《Go语言编程》中calc修改后可在Windows执行的源码
- 机房重构——数据类型很重要
- 第34讲:对List进行高效的排序和倒排序代码实战
- Erwin 生成 mysql 带注释(comment )的脚本
- EditView属性介绍
- C# 文件下载四方法
- java.net.ConnectException: failed to connect to /127.0.1.1 (port 8080)的解决办法
- zabbix安装部署(服务器端)
- iOS面试题四