Ranking (as of 2014-01-15): 257 out of 839
Language: C++
/*
UVa 10912 - Simple Minded Hashing
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_10912_Simple_Minded_Hashing.cpp
*/
#include <cstdio>
const int L_max = 26, S_max = 351;
int nsc[L_max + 1][S_max + 1][L_max + 1];
// nsc[l][s][c] is the number of strings of length l, that maps to s
// and has a max value of c
int ns[L_max + 1][S_max + 1];
// ns[l][s] is the number of strings of length l, that maps to s
int main()
{
for (int s = 1; s <= L_max; s++)
nsc[1][s][s] = 1;
for (int l = 2; l <= L_max; l++)
for (int s = 1; s <= S_max; s++)
for (int c = 1; c <= L_max; c++)
for (int i = 1; i < c; i++)
nsc[l][s][c] += nsc[l - 1][s - c][i];
for (int l = 1; l <= L_max; l++)
for (int s = 1; s <= S_max; s++)
for (int c = 1; c <= L_max; c++)
ns[l][s] += nsc[l][s][c];
for (int c = 1; ; c++) {
int L, S;
scanf("%d %d", &L, &S);
if (!L && !S)
break;
printf("Case %d: %d\n", c,
((L > 0 && L <= L_max && S > 0 && S <= S_max) ? ns[L][S] : 0));
}
return 0;
}
No comments:
Post a Comment