Pagini recente » Cod sursa (job #1196011) | Cod sursa (job #49452) | Cod sursa (job #2372381) | Cod sursa (job #2541081) | Cod sursa (job #2618257)
#include <fstream>
#include <iostream>
#include <queue>
using namespace std;
bool poate(queue<int> Q, int cap, int k)
{
int it=0;
while(!Q.empty())
{
int rem=cap;
while(rem>0)
{
if(!Q.empty() && rem-Q.front()>=0)
{
rem=rem-Q.front();
Q.pop();
}
else
{
rem=0;
}
}
it++;
}
if(it<=k) return true;
return false;
}
int rez(queue<int>Q, int l, int r, int k)
{
if(r-l==1)
{
if(poate(Q,r,k))
{
return r;
}
if(poate(Q,l,k))
{
return l;
}
return -1;
}
int m=l+(r-l)/2;
if(poate(Q,m,k))
{
if(poate(Q,m-1, k))
{
return rez(Q,l, m-1, k);
}
return m;
}
return rez(Q,m+1, r, k);
}
int main()
{
ifstream fin("transport.in");
ofstream fout("transport.out");
queue<int> Q;
int n,k,t,ma=0,s=0;
fin>>n>>k;
for(int i=0; i<n; i++)
{
fin>>t;
if(t>ma) ma=t;
s=s+t;
Q.push(t);
}
fout<<rez(Q,ma,s,k)<<'\n';
return 0;
}