UVA - 10602 Editor Nottoobad

题目大意:要输入 n 个单词,现在有三种操作, 1、输入一个字符,需要按下一次按键。  2、通过声控删除一个字符。3、通过声控复制一遍上面的单词。现在要求按最少的按键来完成输入,并且输出输入的顺序。


解题思路:因为有复制这一功能,所以每次输入一个单词之后要找另一个与它相似度最近的一个。比较两个单词对应的不同字符个数,对于两个不同长度的单词,后面的单词长的话要计算多出的部分,因为是再输入的,要是短的话就不需要计算,因为是通过声控删除的。

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main() {
	int T;
	cin >> T;
	string s[105];
	while (T--) {
		int n;
		cin >> n;
		for (int i = 0; i < n; i++)
			cin >> s[i];
		sort(s, s + n);

		int sum = s[0].size();
		for (int i = 1, cnt; i < n; i++) {
			for (cnt = 0; s[i][cnt] && s[i-1][cnt] && s[i][cnt] == s[i-1][cnt]; cnt++);
			sum += s[i].length() - cnt;
		}

		cout << sum << endl;
		for (int i = 0; i < n; i++)
			cout << s[i] << endl;
	}
	return 0;
}


你可能感兴趣的:(UVA - 10602 Editor Nottoobad)