Cod sursa(job #1098970)
Utilizator | Data | 5 februarie 2014 13:14:44 | |
---|---|---|---|
Problema | Transport | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.03 kb |
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
inline int max(int a, int b)
{
if(a>b) return a;
return b;
}
inline int min(int a, int b)
{
if(a<b) return a;
return b;
}
int n,k;
int a[16001],vmin,vmax;
int ls,ld;
int main()
{
f>>n>>k;
for(int i=1; i<=n; i++)
{f>>a[i]; if(a[i]>ls) ls=a[i];ld+=a[i];}
int mij,i,rez,nr,s;
while(ls<=ld)
{
s=0; nr=0;
mij=(ls+ld)/2;
for(i=1; i<=n; i++)
{
if(s+a[i]<=mij) s+=a[i];
else
{nr++; s=a[i];}
}
if(s)
nr++;
if(nr<=k)
{
ld=mij-1;
rez=mij;
}
else
ls=mij+1;
}
if(nr<=k)
g<<mij;
else
g<<rez;
return 0;
}