Cod sursa(job #2768918)

Utilizator MateiD2Dudu Matei Ioan MateiD2 Data 12 august 2021 16:34:52
Problema Transport Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

int cautsum(int w[],int n,int vf,int s)
{
    int st=vf+1,dr=n,m,poz=-1;
    while(st<=dr)
    {
        m=st+(dr-st)/2;
        if(w[m]-w[vf]<=s)
        {
            poz=m;
            st=m+1;
        }
        else
            dr=m-1;
    }
    return poz;
}

int pasi(int w[],int n,int s)
{
    int vf=0,k=0;
    while(vf<n&&vf!=-1)
    {
        k++;
        vf=cautsum(w,n,vf,s);
    }
    if(vf!=-1)
        return k;
    else
        return vf;
}

int main()
{
    int n,k,maxi=0;
    int v[16002],w[16002];
    w[0]=0;
    v[0]=0;
    fin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
        w[i]=w[i-1]+v[i];
        if(v[i]>maxi)
            maxi=v[i];
    }
    int i=maxi,paasi;
    do
    {
        paasi=pasi(w,n,i);
        i++;
    }while(i<=w[n]&&(paasi>k||paasi==-1));
    fout<<i-1;
    return 0;
}