码迷,mamicode.com
首页 > 编程语言 > 详细

uva 10602 Editor Nottoobad(字符串 + 排序)

时间:2015-02-14 17:32:51      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:c语言   uva   acm   

                             uva 10602 Editor Nottoobad


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

thisthis

Say “delete the last symbol”

0

this thi

Press "n"

1

thisthin

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.

 

 

 

 

 

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




题目大意:要输入n个单词,现在有三种操作, 1、输入一个字符,需要按下一次按键。  2、删除一个字符,无需按下按键。3、复制一遍单词,无需按下按键。求输出所有单词所需最小的按下按键的次数,并输出该单词序列。

解题思路:每次输入一个单词之后要找另一个与它相似度最近的一个,所以需要先排序。比较两个单词,若后一个单词长则要计算多出部分,否则无需计算。


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
using namespace std;
string s[105];
int cmp(string a, string b) {
	return a < b;
}
int main() {
	int T;
	scanf("%d", &T);
	while (T--) {
		int n;
		scanf("%d", &n);
		for (int i = 0; i < n; i++) {
			cin >> s[i];
		}	
		sort(s, s + n, cmp);
		int len = s[0].size(), j;
		for (int i = 1; i < n; i++) {
			if (s[i][0] != s[i - 1][0]) {
				len += s[i].size();
				continue;
			}
			for (j = 0; j < s[i - 1].size(); j++) {
				if (s[i][j] != s[i - 1][j]) break;
			}
			len += s[i].size() - j;
		}
		printf("%d\n", len);
		for (int i = 0; i < n; i++) {
			cout << s[i] << endl;
		}
	}
	return 0;
}




uva 10602 Editor Nottoobad(字符串 + 排序)

标签:c语言   uva   acm   

原文地址:http://blog.csdn.net/llx523113241/article/details/43818093

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!