Cod sursa(job #3030840)

Utilizator tedicTheodor Ciobanu tedic Data 17 martie 2023 22:12:57
Problema Transport Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#pragma GCC optimize("O1")
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int v[16005];
int n,k,st,dr;
int f(int b)
{
    int poz=1,s=0;
    for(int j=0; j<n; j++)
    {
        if(s+v[j]<=b)
            s+=v[j];
        else
        {
            s=v[j];
            poz++;
        }
    }
    if(poz<=k)
        return 1;
    else
        return 0;
}
int main()
{

    cin>>n>>k;
    for(int i=0; i<n; i++)
        cin>>v[i];
    st=1,dr=16000;
    int ok=0;
    while(st<=dr)
    {
      ///  cout<<st<<" "<<dr<<'\n';
        if(f(dr)==1 && f(dr-1)==0)
        {
            ok=1;
            cout<<dr;
            break;
        }
        else if(f(dr)==1  && f(dr-1)==1 && f((dr+st)/2)==0)
            st=(st+dr)/2;
            else if(f(dr)==1  && f(dr-1)==1 && f((dr+st)/2)==1)
                dr=(st+dr)/2;
    }
    if(ok==0)
    cout<<dr;
    return 0;
}