Pagini recente » Cod sursa (job #393321) | Cod sursa (job #471469) | Cod sursa (job #1424696) | Cod sursa (job #2354497) | Cod sursa (job #1826725)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int n, k, v[16001];
int verificare(int x)
{
int i, c = 1, s = 0;
for(i = 0; i < n; i++)
{
if(v[i] > x)
return 0;
if(s + v[i] <= x)
s += v[i];
else
{
s = v[i];
c++;
}
}
if(c < k)
return 0;
if(c == k)
return 1;
return 2;
}
void Transport(int lo, int hi)
{
int mid;
mid = lo + (hi - lo) / 2;
int c = verificare(mid);
if(c == 0)
Transport(lo, mid - 1);
else if (c == 2)
Transport(mid + 1, hi);
else
{
while(verificare(mid - 1) == 1)
mid--;
g << mid;
}
}
int main()
{
int i, maxim = -1, s = 0;;
f >> n >> k;
for(i = 0; i < n; i++)
{
f >> v[i];
if(v[i] > maxim)
maxim = v[i];
s += v[i];
}
Transport(maxim, s);
f.close();
g.close();
return 0;
}