Cod sursa(job #615074)

Utilizator teban.mihaiTeban Mihai Andrei teban.mihai Data 8 octombrie 2011 15:25:21
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>

using namespace std;

ifstream f("transport.in");
ofstream g("transport.out");

int n,k,i,a[16001],maxi,sum,sol;

bool verif(int v) {
    int j=1,t=0,s;
    if (v<maxi) return false;
    while (j<=n) {
        s=0;
        while (j<=n && s+a[j]<=v) {
            s+=a[j];j++;
        }
        t++;
    }
    if (t<=k) return true;
    return false;
}

int caut_bin(int st,int dr) {
    int m=(st+dr)/2;
    while (st<=dr) {
        if (verif(m-1)==true) dr=m-1;
           else if (verif(m)==true) return m;
                else st=m+1;
        m=(st+dr)/2;
    }
}

int main() {
    f >> n >> k;
    for (i=1;i<=n;i++) {
        f >> a[i];
        maxi=max(maxi,a[i]);
        sum+=a[i];
    }
    sol=caut_bin(maxi,sum);
    g << sol << '\n';
    f.close();g.close();
    return 0;
}