Ranking (as of 2013-03-17): 136
Language: C++
/*
UVa 10602 - Editor Nottoobad
To build using Visual Studio 2008:
cl -EHsc -O2 editor_nottoobad.cpp
*/
#include <limits>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int n_max = 100;
struct word {
char letters[n_max + 1];
int common_letters; // number of common letters with the first word
} words[n_max];
bool compare_word(const word& i, const word& j)
{
if (i.common_letters > j.common_letters)
return true;
else if (i.common_letters < j.common_letters)
return false;
else
return strcmp(i.letters + i.common_letters,
j.letters + j.common_letters) < 0;
}
int main()
{
int t;
scanf("%d\n", &t);
while (t--) {
int n;
scanf("%d\n", &n);
for (int i = 0; i < n; i++)
gets(words[i].letters);
for (int i = 1; i < n; i++) {
const char *p = words[0].letters, *q = words[i].letters;
for ( ; *p && *q; p++, q++)
if (*p != *q)
break;
words[i].common_letters = p - words[0].letters;
}
sort(words + 1, words + n, compare_word);
int pressed = strlen(words[0].letters);
for (int i = 1; i < n; i++) {
const char *p = words[i - 1].letters, *q = words[i].letters;
for ( ; *p && *q; p++, q++)
if (*p != *q)
break;
pressed += words[i].letters + strlen(words[i].letters) - q;
}
printf("%d\n", pressed);
for (int i = 0; i < n; i++)
printf("%s\n", words[i].letters);
}
return 0;
}
No comments:
Post a Comment