Cod sursa(job #1452625)

Utilizator preda.andreiPreda Andrei preda.andrei Data 21 iunie 2015 14:52:22
Problema Grupuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int v[100001];
int v2[100001];

bool grupuri(int mij, int n, int k)
{
    for(int i=1; i<=n; i++)
        v2[i]=v[i];
    int r=0, i;
    while(k>0 && r==0){
        r=mij;
        i=1;
        while(r>0 && i<=n){
            if(v2[i]>0){
                v2[i]--;
                r--;
            }
            i++;
        }
        if(r<=0)
            k--;
    }

    if(k<=0)
        return true;
    return false;
}

int main()
{
    FILE *fin=fopen("grupuri.in", "r");
    FILE *fout=fopen("grupuri.out", "w");

    int k, n, st, dr, mij, gr;
    fscanf(fin, "%d%d", &k, &n);
    dr=0;
    for(int i=1; i<=n; i++){
        fscanf(fin, "%d", &v[i]);
        dr+=v[i];
    }
    for(int i=1; i<=n; i++)
        for(int j=1; j<n; j++){
            if(v[j]<v[j+1]){
                v[j]=v[j]+v[j+1];
                v[j+1]=v[j]-v[j+1];
                v[j]=v[j]-v[j+1];
            }
        }
    st=1;
    while(st<dr){
        mij=(st+dr)/2;
        if(grupuri(mij, n, k)){
            gr=mij;
            st=mij+1;
        }
        else{
            dr=mij-1;
        }
    }
    fprintf(fout, "%d", gr);
    return 0;
}