Cod sursa(job #1034774)

Utilizator NitaMihaitavoidcube NitaMihaita Data 18 noiembrie 2013 02:58:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
using namespace std;
int main()
{
    ifstream f("transport.in");
    ofstream g("transport.out");
    int i,n,k,nr,s,d,c,sum,r;
    f>>n>>k;
    int v[n+1];
    f>>v[1];
    s=d=v[1];
    for(i=2;i<=n;d+=v[i],++i)
    {
        f>>v[i];
        if(v[i]>s)s=v[i];
    }
    c=(s+(r=d))>>1;
    while(true)
    {
        for(sum=v[1],i=2,nr=1;i<=n && nr<=k;++i)
            if(sum+v[i]<=c)sum+=v[i];
            else
            {
                ++nr;
                sum=v[i];
            }
        if(nr<=k && c<r)r=c;
        if(nr<=k) c=(s+(d=c))>>1;
        else c=((s=c)+d)>>1;
        if(c==s || c==d)break;
    }
    c=s;
    for(sum=v[1],i=2,nr=1;i<=n && nr<=k;++i)
            if(sum+v[i]<=c)sum+=v[i];
            else
            {
                ++nr;
                sum=v[i];
            }
    if(nr<=k && c<r)r=c;
    c=d;
    for(sum=v[1],i=2,nr=1;i<=n && nr<=k;++i)
            if(sum+v[i]<=c)sum+=v[i];
            else
            {
                ++nr;
                sum=v[i];
            }
    if(nr<=k && c<r)r=c;
    g<<r<<"\n";
    f.close();
    g.close();
    return 0;
}