Pagini recente » Cod sursa (job #2170457) | Cod sursa (job #1453374) | Cod sursa (job #1728031) | Cod sursa (job #1819466) | Cod sursa (job #1061925)
#include <iostream>
#include <string>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <queue>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <stdarg.h>
#include <stdio.h>
using namespace std;
//#include <unordered_map>
#define NMAX 16001
int N, K, st[NMAX], nrTransp, found = (1 << 30);
int isPossible (int x)
{
int i = 0, s = 0;
nrTransp = 0;
while ( i < N )
{
s = s + st[i++];
if ( x >= s )
continue;
else
{
s -= st[--i];
nrTransp ++;
s = 0;
}
if ( nrTransp < K )
continue;
else
break;
}
if (nrTransp <= N && i == N)
return nrTransp;
return -1;
}
int binarySearch (int li, int ls)
{
int mid = ( li + ls ) / 2;
int result = isPossible (mid);
if ( result > 0 && found > mid)
{
found = mid;
}
if ( li < ls )
{
if ( nrTransp + 1 <= K )
binarySearch (li, mid - 1);
else
binarySearch (mid + 1, ls);
}
else
return found;
}
int main()
{
FILE *f = fopen ("transport.in", "r");
FILE *g = fopen ("transport.out", "w");
fscanf (f, "%d %d", &N, &K);
int maxim = 0, s = 0;
for (int i = 0; i < N; i++)
{
fscanf (f, "%d", &st[i]);
if ( st[i] > maxim )
maxim = st[i];
s = s + st[i];
}
fprintf (g, "%d", binarySearch ( maxim, s ));
fclose(f);
fclose(g);
return 0;
}