Cod sursa(job #2021298)

Utilizator ptudortudor P ptudor Data 13 septembrie 2017 09:51:59
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;
int v[16001];
int k;
int n;
int CanWeDoIt (int x)
{
    int i;
    int s=0;
    int f=1;

    for (i=1;i<=n;i++)
    {
        if (v[i]>x)
        {
            return 0;
        }
        s=s+v[i];
        if (s>x)
        {
            f++;
            s=v[i];

        }
        if (f>k)
            return 0;
    }
    return 1;
}

int cautbin(int st,int dr)
{
    long long mij;
    int poz;
    int aux;
    while (st<=dr)
    {

        mij=(dr-st)/2+st;
        aux=CanWeDoIt(mij);
        cout<<"st="<<st<<" dr="<<dr;
        if (aux==1)
        {
            poz=mij;
            dr=mij-1;

        }
        else
        {
            st=mij+1;
        }
    }
    return poz;
}
int main()
{
    ifstream in("transport.in");
    ofstream out("transport.out");
    int st,dr;
    in>>n>>k;
    int i;
    int m=0;
    int s=0;

    for (i=1;i<=n;i++)
    {
        in>>v[i];
        s=s+v[i];
        if (v[i]>m)
            m=v[i];
    }
    //cout<<CanWeDoIt(8)<<" b ";
    dr=s;
    st=m;
 //   cout<<s<<" "<<m;
    out<<cautbin(st,dr);
}