Cod sursa(job #1279512)

Utilizator whoasdas dasdas who Data 30 noiembrie 2014 15:13:05
Problema Grupuri Scor 18
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <queue>
#include <utility>
#include <set>
#include <list>

using namespace std;

typedef list<int>::iterator lit;
int main()
{
    FILE *in = fopen("grupuri.in", "r");
    FILE *out = fopen("grupuri.out", "w");

    int n, k;
    list<int> l;
    fscanf(in, "%d %d", &k, &n);

    for (int i = 0; i < n; i++) {
        int x;
        fscanf(in, "%d", &x);
        if (x > 0)
            l.push_front(x);
    }

    int ret = 0;
    while (true) {
        n = l.size();
        if (k > n) {
            break;
        }
        if (k == n) {
            ret += l.back();
            break;
        }

        lit it = l.begin();
        for (int i = 0; i < k; ++i) ++it;
        lit itk = it;
        it--;
        int dif = *(it) - (*itk) + 1;

        ret += dif;

        for (it = l.begin(); it != itk; ++it) {
            (*it) -= dif;
        }
        l.sort();
        while (!l.empty() && l.front() == 0)
            l.pop_front();
        l.reverse();
    };
    fprintf(out, "%d", ret);
    return 0;
}