Cod sursa(job #2065569)

Utilizator biaiftimeIftime Bianca biaiftime Data 13 noiembrie 2017 21:36:03
Problema Transport Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#define Nmax 160002
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int v[Nmax],n,k,sum,nrmax;
void Read(int &n,int &k,int v[Nmax])
{
    int i;
    fin>>n>>k;
    for(i=1;i<=n;++i){ fin>>v[i]; sum=sum+v[i]; nrmax=max(v[i],nrmax);}
}
long long TestTransport(long long val)
{
    int i;
    int s=v[1]; int nr=1;
    for(i=2;i<=n;++i)
    {
        if(s+v[i]<=val) s=s+v[i];
        else {++nr; s=0;}
    }
    return nr;
}
long long CautareBinara(long long s,long long d,int k)
{
    if(s<d)
    {
        long long m=s+(d-s)/2;
        long long val=TestTransport(m);
        if(val==k)return m;
        if(val>k)return CautareBinara(m+1,d,k);
        else return CautareBinara(s,m-1,k);
    }
}
int main()
{
    Read(n,k,v);
    long long val=CautareBinara(nrmax,sum,k);
    while(val-1>=nrmax&&TestTransport(val-1)<=k)--val;
    fout<<val<<"\n";
    return 0;
}