Ranking (as of 2014-06-22): 220 out of 482
Language: C++
/*
UVa 10576 - Y2K Accounting Bug
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_10576_Y2K_Accounting_Bug.cpp
*/
#include <cstdio>
const int nr_months = 12, nr_posts = 8, nr_consecutive_posts = 5;
int s, d, max_amount, posts[nr_months];
void calculate_amount(int pi, int amount)
{
if (pi == nr_posts) {
amount = 0;
for (int i = 0; i < nr_months; i++) {
#ifdef DEBUG
printf("%d%c", posts[i], ((i < nr_months - 1) ? ' ' : '\n'));
#endif
amount += posts[i];
}
if (amount > max_amount)
max_amount = amount;
}
else if (!pi) {
int i;
for (i = 0; i < nr_consecutive_posts; i++) {
posts[i] = s;
amount += s;
}
for (i--; i >= 0 && amount >= 0; i--) {
posts[i] = -d;
amount -= s + d;
}
calculate_amount(pi + 1, amount);
}
else {
amount -= posts[pi - 1];
posts[pi + nr_consecutive_posts - 1] = (amount + s < 0) ? s : -d;
amount += posts[pi + nr_consecutive_posts - 1];
calculate_amount(pi + 1, amount);
}
}
int main()
{
while (scanf("%d %d", &s, &d) != EOF) {
max_amount = -1;
calculate_amount(0, 0);
if (max_amount >= 0)
printf("%d\n", max_amount);
else
puts("Deficit");
}
return 0;
}
No comments:
Post a Comment