传送门UVa 10602 - Editor Nottoobad
题意:输出出最小的敲键盘的数目。
因为要使敲键盘数目最少,所以尽量用声控。因此把单词排序,依次统计就行。
可是当时做的时候被Remember that the first word must be pressed first!搞懵了,以为一定要先输出第一个输入,然后就没思路了。
后来问了帆帆帆帆帆帆帆帆帆帆,才知道这句话的意思是第一个输入必须要手打,不能声控。
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int cmp(const void *_a, const void *_b)
{
char *a = (char *)_a;
char *b = (char *)_b;
return strcmp(a, b);
}
int main()
{
//freopen("input.txt", "r", stdin);
char word[110][110];
int T, i, j, n, cnt;
scanf("%d%*c", &T);
while (T--)
{
scanf("%d%*c", &n);
for (i = 0; i < n; i++)
gets(word[i]);
qsort(word, n, sizeof(word[0]), cmp);
cnt = strlen(word[0]);
for (i = 0; i < n - 1; i++)
{
j = 0;
int len = strlen(word[i + 1]);
while (word[i][j] == word[i + 1][j] && j < len)
j++;
cnt += len - j;
}
printf("%d\n", cnt);
for (i = 0; i < n; i++)
puts(word[i]);
}
return 0;
}