Pagini recente » Cod sursa (job #614924) | Cod sursa (job #1695635) | Cod sursa (job #1510594) | Cod sursa (job #2724909) | Cod sursa (job #3121518)
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int howMany(long long cost, vector<int> g, int ferriesCnt)
{
int boats=0,sum=0;
for(int i=0;i<g.size();i++)
{
if(sum+g[i]>cost)
{
boats++;
if(boats > ferriesCnt)
return ++ferriesCnt; // exceeded boat limit, return large value
sum=0;
}
sum+=g[i];
}
return ++boats;
}
long long binaryS(vector<int> g, int ferriesCnt, long long uB, long long lB)
{
long long minC=0;
while(lB<uB)
{
long long mid=(uB+lB)/2;
if(howMany(mid,g,ferriesCnt)<=ferriesCnt)
minC=uB=mid;
else lB=mid+1;
}
return minC;
}
int main()
{
vector<int> g;
int n,k;
long long upperBound=0,lowerBound=0;
ifstream fin("transport.in");
ofstream fout("transport.out");
fin>>n>>k;
int x;
for(int i=0;i<n;i++)
{
fin>>x,g.push_back(x);
upperBound+=x;
if(lowerBound<x)
lowerBound=x;
}
fout<<binaryS(g,k,upperBound,lowerBound)<<endl;
return 0;
}