Hey all,
I am doing this problem:
http://www.usaco.org/index.php?page=viewproblem2&cpid=376
From my understanding, what I need to do is keep changing the highest and lowest hills (per a given iteration), until the difference between the highest and lowest hill is equal to 17, at which point I stop iterating.
However, I am failing the majority of the tests, which clearly means I have misunderstood this problem. Could someone please hint as to why my approach is not right?
My attempt:
#include <fstream>
#include <string>
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
ifstream fin("skidesign.in");
ofstream fout("skidesign.out");
// number of lines of input
int n;
fin >> n;
// if we have a single number, there is no cost
if (n == 1)
{
fout << 0 << "\n";
return 0;
}
vector<int> heights;
int x;
for (int i = 0; i < n; i++)
{
fin >> x;
heights.push_back(x);
}
int max_diff = 17;
int cost = 0;
sort(heights.begin(), heights.end());
// loop invariant is that the height vector is in ascending order.
while (heights[n - 1] - heights[0] != max_diff)
{
heights[n - 1]--;
heights[0]++;
cost++;
sort(heights.begin(), heights.end());
};
fout << 2 * (cost * cost) << endl;
// cout << cost << endl;
fin.close();
fout.close();
}