Cod sursa(job #1009185)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 12 octombrie 2013 16:35:18
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<cstdio>
using namespace std;
int s,n,k,k_fals,i,x,last,med,mx;
bool bn;
int v[16000];
void verif()
{
    s=0;k_fals=1;bn=0;
    for (i=0;i<n;++i)
        {
        if (s+v[i]>med)
            {
            ++k_fals;
            s=0;
            }
        s=s+v[i];
        }
    if (k_fals<=k)
            bn=1;
}
void bs_left(int st, int dr){
    while(dr>st){
        med = (st + dr) / 2;
        verif();
        if(bn){
            last=med;
            dr=med;
        }
        else{
            st=med+1;
        }
    }
}
int main()
{
    FILE *fin=fopen("transport.in","r"),*fout=fopen("transport.out","w");
    fscanf(fin,"%d%d",&n,&k);
    s=0;mx=0;
    for (i=0;i<n;++i)
        {
        fscanf(fin,"%d",&v[i]);
        if (mx<v[i])
            mx=v[i];
        s+=v[i];
        }
    bs_left(mx,s);
    fprintf(fout,"%d\n",last);
    fclose(fin);
    fclose(fout);
    return 0;
}