Cod sursa(job #2026117)

Utilizator NashikAndrei Feodorov Nashik Data 23 septembrie 2017 18:47:47
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
//#include <iostream>
#include <fstream>
using namespace std;
int v[16005];

int camioane(int cant,int n,int k)
{
    int drum=0,sum=0;
    for(int i=1;i<=n;i++)
    {
        sum+=v[i];
        if(sum>cant and sum<2*cant){
            sum=v[i];
            drum++;
        }
        else
            if(sum>=2*cant)
                return k+1;
    }
    if(sum<=cant and sum>0)
        drum++;

    return drum;
}
int main()
{
    ifstream cin("transport.in");
    ofstream cout("transport.out");
    int ma=-1,sol=16005,n,k,st=1,dr=16000,mij;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        {
            cin>>v[i];
            ma=max(v[i],ma);
        }
    while(st<=dr){
        mij=(st+dr)/2;
        int p=camioane(mij,n,k);
        if(p<=k){
            sol=min(sol,mij);
            dr=(st+dr)/2-1;
        }
        else
            st=(st+dr)/2+1;

    }
    cout<<sol;
    return 0;
}