Pagini recente » Cod sursa (job #565753) | Cod sursa (job #1827023) | Cod sursa (job #1787457) | Cod sursa (job #1090493) | Cod sursa (job #1395022)
#include <iostream>
#include <fstream>
using namespace std;
int n,k,v[16001];
int verify(int p)
{
int c=0,i=1,act=p;
while(i<=n)
{
if(c>k)
return 1;
if(act==v[i])
{
act=p;
c++;
i++;
continue;
}
if(act>v[i])
act-=v[i];
else if(act<v[i])
{
c++;
act=p-v[i];
if(act==0)
{
act=p;
c++;
}
}
i++;
}
if(c+1<k)
return -1;
else if(c+1>k)
return 1;
else return 0;
}
int cautare(int st,int dr)
{
int x=(st+dr)/2;
if(x==13)
x=13;
if(verify(x)==1)
cautare(x,dr);
else if(verify(x)==-1)
cautare(st,x);
else return x;
}
int main()
{
ifstream f("transport.in");
ofstream g("transport.out");
f>>n>>k;
int i,s=0,maxim=0;
for(i=1; i<=n; i++)
{
f>>v[i];
s+=v[i];
if(v[i]>maxim)
maxim=v[i];
}
g<<cautare(maxim,s);
return 0;
}