Cod sursa(job #1714139)

Utilizator DaniellDa Vinci Daniell Data 7 iunie 2016 16:47:22
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <fstream>
#define nmax 16001
#define nada false
#define ggwp true

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

int n,k,v[nmax],i,maxx,x,act;

bool verif( int h )
{int sum=0;
x=0;
for(i=1;i<=n;i++)
{
if(sum+v[i]<=h )
sum+=v[i];
else{x++;sum = v[i];}
}
if(++x<=k)return ggwp;
return nada;
}

int cbin( int st,int dr )
{
int answ=0,m ;
while(st<=dr)
{
m=st+(dr-st)/2;
if(verif(m))
{answ=m;
 dr=m-1;
}
else st = m + 1;}
return answ;
}

int main()
{fin>>n>>k;
for(i=1;i<=n;i++)
  {fin>>v[i];if(maxx<v[i])maxx=v[i];}
for(i=1;i<=n;i++)
{if(act+v[i]<=maxx)act+=v[i];
else {x++;act=v[i];}
}
if(++x<=k)fout<<maxx;
else
{act=0;
for(i=1;i<=n;i++)act+=v[i];
fout<<cbin(maxx,act);
}
    return 0;
}