Ranking (as of 2013-07-13): 1685 out of 2392
Language: C++
/*
UVa 10465 - Homer Simpson
To build using Visual Studio 2008:
cl -EHsc -O2 homer_simpson.cpp
*/
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#ifdef __ELAPSED_TIME__
#include <ctime>
#endif
using namespace std;
pair<int, int> how_many_burgers_to_eat(int m, int n, int t)
{
vector< pair<bool, int> > burgers(t + 1, make_pair(false, 0));
// burgers[i].first is true if time of i is realized
// burgers[i].second is the number of bergers Homer can eat in time of i
burgers[0].first = true;
int i;
for (i = min(m, n); i <= t; i++) {
if (i >= m && i >= n) {
if (burgers[i - m].first && burgers[i - n].first)
burgers[i] = make_pair(true,
max(burgers[i - m].second + 1, burgers[i - n].second + 1));
else if (burgers[i - m].first)
burgers[i] = make_pair(true, burgers[i - m].second + 1);
else if (burgers[i - n].first)
burgers[i] = make_pair(true, burgers[i - n].second + 1);
}
else if (i >= m) {
if (burgers[i - m].first)
burgers[i] = make_pair(true, burgers[i - m].second + 1);
}
else {
if (burgers[i - n].first)
burgers[i] = make_pair(true, burgers[i - n].second + 1);
}
}
for (i = t; i; i--)
if (burgers[i].first)
break;
return make_pair(burgers[i].second, t - i);
}
int main()
{
#ifdef __ELAPSED_TIME__
time_t start = clock();
#endif
int m, n, t;
while (cin >> m >> n >> t) {
pair<int, int> result = how_many_burgers_to_eat(m, n, t);
cout << result.first;
if (result.second)
cout << ' ' << result.second;
cout << endl;
}
#ifdef __ELAPSED_TIME__
cerr << "elapsed time = " <<
static_cast<double>(clock() - start) / CLOCKS_PER_SEC << " sec.\n";
#endif
return 0;
}
No comments:
Post a Comment