This is an easy problem from uva judge http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=2924
Greedy and sorting.
How I did it
- I read the number cases.
- I read the prices and put them into a vector until I found a zero.
- I sort the vector in a non increasing order.
- Traverse the vector and compute the value of the land with the formula given in the problem description.
- If the land price is bigger than 5,000,000 print “Too expensive” otherwise print the lands price.
Hints
- The most bigger input data can be computed into a int variable.
- We need to sort the data to get the minimum price.
- To compute the price use double variables.
Code
#include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <cmath> using namespace std; bool cmp(int a, int b) { return a>b; } int main() { vector<int> vec; int casos, val; scanf("%d", &casos); while(casos--) { vec.clear(); while(scanf("%d", &val)) { if(!val) break; vec.push_back(val); } sort(vec.begin(), vec.end(), cmp); int index = 1; double ans = 0.0, tmp; for(int i=0; i<vec.size(); i++) { tmp = 2 * pow(vec[i], index); ans = ans + tmp; index++; } if(ans > 5000000) printf("Too expensive\n"); else cout<<ans<<endl; } return 0; }