Cod sursa(job #411560)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 4 martie 2010 23:12:56
Problema Transport Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<cstdio>
#include<fstream>
#define MAX 16005
using namespace std;

int n,k,v[MAX];

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

void cauta(int i,int j)
{
    if(i!=j);
    {
    int mij=(i+j)/2,nr=nrt(mij);
    if(nr<k)
        cauta(i,mij-1);
    else if(nr>k)
        cauta(mij+1,j);
    else
    {
        //cauta(i,mij-1);
        mij--;
        while(nrt(mij)==k)
            mij--;
        mij++;
        printf("%d",mij);
    }
    }

}

int main()
{
    int i,max,suma=0;
    ifstream fin("transport.in");
    freopen("transport.out","w",stdout);
    fin>>n>>k;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
        suma+=v[i];
        if(v[i]>max)
            max=v[i];
    }
    cauta(max,suma);
    return 0;
}