Cod sursa(job #766355)

Utilizator bratualexBratu Alexandru bratualex Data 11 iulie 2012 01:02:31
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <fstream>

using namespace std;
ifstream fin("transport.in");

ofstream fout("transport.out");

int valid (int);
int cauta (int,int);
int a[16000],n,k,rez;
int main()
{
    int i,sum=0,max=0,s=0,gata,nrt,j;
    fin>>n>>k;

    for (i=0;i<n;i++)
    {

        fin>>a[i];
        if ( a[i]>max )
            max=a[i];
        sum=sum+a[i];
    }


    gata=cauta(max,sum);
    //j=gata-1;
    //while(valid(j))
    //{
    //    j--;
    //}
    //if (j==gata-1)
    //    fout<<gata;
    //else
     //   fout<<j+1;

fout<<rez;



    fin.close();
    fout.close();
    return 0;
}

int cauta (int a, int b )
{
    int mid;
    mid=a+(b-a)/2;
    if (a!=b)
    //{
        if(!valid(mid))
        {
            return cauta(mid+1,b);
        }
        else
        {
            rez=mid;
            //x=cauta (a,mid);
           // if (cauta (a,mid))
            //    return cauta(a,mid);
            return cauta(a,mid);

        }
   // }
   // else
   // {
    //    if (valid(mid))
    //        return mid;
    //    else return -1;
    //}
}



int valid (int i)
{
    int nrt,j,s;
    nrt=k;
    j=0;
    s=a[0];
    while(nrt&&j<n)
    {
        j++;
        if(s+a[j]>i)
        {
            nrt--;
            s=a[j];
                //j++;
        }
        else
            if ( s+a[j]<i)
            {
                s=s+a[j];
//              j++;
            }
            else
            {
                s=0;
  //            j++;
                nrt--;
            }
    }
    if (j==n)
        return 1;
    return 0;
}