Cod sursa(job #2757847)

Utilizator Mihai_AritonMihai Ariton Mihai_Ariton Data 6 iunie 2021 21:01:09
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <fstream>
using namespace std;
 
int v[16001];
int main()
{
   ifstream cin("transport.in");
    ofstream cout("transport.out");
    
    int n, maxc=0, minc=0, mid, dr, st, sumac=0, i=1, k, cnt=0, sol;
    cin>>n>>k;
    for(int i=1; i<=n; i++)
    {
        cin>>v[i];
        if(v[i]>minc)
        	minc=v[i];
        maxc+=v[i];
    }
    dr=maxc;
    st=minc;
    //cout<<dr<<" "<<st;
    //cout<<"3242938792379";
    while(st<=dr)
    {
        mid=(st+dr)/2;
        //cout<<st<<" "<<mid<<" "<<dr<<endl;
        //cout<<"mid = "<<mid<<endl;
        for(int i=1; i<=n; i++)
        {
            //cout<<"i = "<<i<<endl;
            //cout<<"v[i] = "<<v[i]<<endl;
            sumac+=v[i];
            //cout<<"sumac = "<<sumac<<endl;
            if(sumac>mid)
            {
                cnt++;
                //cout<<"cnt = "<<cnt<<endl;
                sumac=v[i];
                //cout<<"sumac = "<<sumac<<endl;
            }
        }
        //if(sumac<=mid)
            cnt++;
        if(cnt<=k)
            dr=mid-1, sol=mid;
        else
            st=mid+1;
        /*cout<<"st = "<<st<<endl;
        cout<<"dr = "<<dr<<endl;*/
        sumac=0;
        cnt=0;
    }
    cout<<sol;

    
    return 0;
}