Ranking (as of 2015-06-08): 7 out of 107
Language: C++
/*
UVa 12249 - Overlapping Scenes
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_12249_Overlapping_Scenes.cpp
*/
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
const int n_max = 6, nr_chars_max = 10;
int T;
scanf("%d", &T);
for (int t = 1; t <= T; t++) {
int n;
scanf("%d", &n);
int scenes[n_max], scene_string_lengths[n_max], min_length = 0;
char scene_strings[n_max][nr_chars_max + 1],
merged_string[n_max * nr_chars_max + 1];
for (int i = 0; i < n; i++) {
scenes[i] = i;
scanf("%s", scene_strings[i]);
scene_string_lengths[i] = strlen(scene_strings[i]);
min_length += scene_string_lengths[i];
}
do {
strcpy(merged_string, scene_strings[scenes[0]]);
for (int i = 1; i < n; i++) {
int j, k = strlen(merged_string);
for (j = 0; j < k; j++)
if (!memcmp(&merged_string[j], &scene_strings[scenes[i]][0], k - j))
break;
strcat(merged_string, &scene_strings[scenes[i]][k - j]);
}
#ifdef DEBUG
printf("%s\n", merged_string);
#endif
min_length = min(min_length, static_cast<int>(strlen(merged_string)));
} while (next_permutation(scenes, scenes + n));
printf("Case %d: %d\n", t, min_length);
}
return 0;
}
No comments:
Post a Comment