Ranking (as of 2015-07-16): 11 out of 499
Language: C++
/*
UVa 11955 - Binomial Theorem
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_11955_Binomial_Theorem.cpp
*/
#include <cstdio>
#include <cstdlib>
int main()
{
const int k_max = 50;
long long bc[k_max + 1][k_max + 1]; // binomial coefficient
for (int i = 0; i <= k_max; i++)
bc[i][0] = 1;
for (int j = 0; j <= k_max; j++)
bc[j][j] = 1;
for (int i = 1; i <= k_max; i++)
for (int j = 1; j < i; j++)
bc[i][j] = bc[i - 1][j - 1] + bc[i - 1][j];
int T;
scanf("%d", &T);
for (int t = 1; t <= T; t++) {
const int nr_chars_max = 100;
char s[nr_chars_max + 1], a[nr_chars_max + 1], b[nr_chars_max + 1];
scanf("%s", s);
const char* p = s + 1;
char* q;
for (q = a; *p != '+'; p++, q++)
*q = *p;
p++;
*q = '\0';
for (q = b; *p != ')'; p++, q++)
*q = *p;
p += 2;
*q = '\0';
int k = atoi(p);
#ifdef DEBUG
printf("%s %s %d\n", a, b, k);
#endif
printf("Case %d: ", t);
for (int i = k, j = 0; i >= 0; i--, j++) {
if (bc[k][j] > 1)
printf("%lld*", bc[k][j]);
if (i) {
printf("%s", a);
if (i > 1)
printf("^%d", i);
}
if (i && j)
putchar('*');
if (j) {
printf("%s", b);
if (j > 1)
printf("^%d", j);
}
if (i)
putchar('+');
}
putchar('\n');
}
return 0;
}
No comments:
Post a Comment