Cod sursa(job #461955)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 9 iunie 2010 13:31:02
Problema Grupuri Scor 14
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

int n, K;
int i, j, k;
int stop, grup, Min;

struct animale
{
    int poz;
    int val;
};

struct animale v[100001];

int compare (animale a, animale b)
{
    if (a.val != b.val)
        return a.val > b.val;
    else
        return a.poz < b.poz;
}

int main ()
{
    FILE *f = fopen ("grupuri.in","r");
    FILE *g = fopen ("grupuri.out","w");
    fscanf (f,"%d %d", &K, &n);

    for (i=1; i<=n; ++i)
    {
        fscanf (f,"%d", &v[i].val);
        v[i].poz = i;
    }

    sort (v + 1, v + 1 + n, compare);

    /* for (i=1; i<=n; ++i)
            printf ("%d ", v[i].poz);
        printf ("\n");
        for (i=1; i<=n; ++i)
            printf ("%d ", v[i].val);
        printf ("\n_______________\n");*/

    while (!stop)
    {
        for (i=1; i<=K; ++i)
        {
            if (v[i].val <= 0)
            {
                stop = 1;
                break;
            }
            else
                v[i].val --;
        }
        if (stop)
            break;
        grup ++;
        sort (v + 1, v + 1 + n, compare);
        Min = v[K+1].val;
        while (Min < v[K].val)
        {
            for (i=1; i<=K; ++i)
            {
                if (v[i].val <= 0)
                {
                    stop = 1;
                    break;
                }
                else
                    v[i].val --;
            }
            if (stop)
                break;
            grup ++;
        }
        sort (v + 1, v + 1 + n, compare);
    }

    //printf ("grup = %d\n\n", grup);

    fprintf (g,"%d", grup);

    fclose(g);
    fclose(f);
    return 0;
}