Ranking (as of 2013-03-16): 97
Language: C++
/*
UVa 10338 - Mischievous Children
To build using Visual Studio 2008:
cl -EHsc -O2 mischievous_children.cpp
*/
#include <cstdio>
#include <cstring>
int main()
{
const int nr_chars_max = 20;
long long factorials[nr_chars_max + 1];
factorials[0] = 1;
for (int i = 1; i <= nr_chars_max; i++)
factorials[i] = factorials[i - 1] * i;
#ifdef DEBUG
printf("%lld\n", factorials[nr_chars_max]);
#endif
const int nr_letters = 26;
int frequencies[nr_letters];
// frequencies[i] is the number of occurrences of (i + 'A')
int ds;
scanf("%d", &ds);
for (int s = 1; s <= ds; s++) {
memset(frequencies, 0, sizeof(frequencies));
char word[nr_chars_max + 1];
scanf("%s", word);
int length = strlen(word);
for (int i = 0; i < length; i++)
frequencies[word[i] - 'A']++;
long long f = factorials[length];
for (int i = 0; i < nr_letters; i++)
if (frequencies[i])
f /= factorials[frequencies[i]];
printf("Data set %d: %lld\n", s, f);
}
return 0;
}
No comments:
Post a Comment