Cod sursa(job #381272)

Utilizator popoiu.georgeGeorge Popoiu popoiu.george Data 9 ianuarie 2010 19:38:18
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<fstream>
#define inf "transport.in"
#define outf "transport.out"
#define NMax 16001
using namespace std;

fstream f(inf,ios::in),g(outf,ios::out);

int N,K;
int v[NMax];

int verif(int cap)
{
int cur=0;
int pasi=0;
for(int i=1;i<=N;i++)
    {
    if(v[i]>cap)return -1;
    else if(cur+v[i]<=cap)cur+=v[i];
    else {cur=v[i];pasi++;}
    }
return pasi+1;
}

int cauta(int st,int dr)
{
int mij,cost;
int p;
while(st<=dr)
    {
    mij=(st+dr)/2;
    p=verif(mij);
    if(p<=K && p!=-1)
        {
        cost=mij;
        dr=mij-1;
        }
    else if(p==-1 || p>K)st=mij+1;
    }
return cost;
}

void Citire()
{
int sum=0,max=0;
f>>N>>K;
for(int i=1;i<=N;i++)
    {
    f>>v[i];
    sum+=v[i];
    if(max<v[i])max=v[i];
    }
g<<cauta(max,sum);
}

int main()
{
Citire();
f.close();
g.close();
return 0;
}