Cod sursa(job #2624546)

Utilizator darkeagleDaniel Popescu darkeagle Data 4 iunie 2020 23:02:53
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

int v[16003],n,k;
int verif(int c) {


	int i = 0, cur = 0, suma = 0;
	while( i <= n){

		if(cur + v[i] <= c)
			cur += v[i];
		else
		{
			cur = v[i];
			suma++;
		}
		i++;
	}
	if(cur != 0)
		suma++;
	return suma;
}

int BS(int st, int dr) {

	while(st <= dr) {
		
		int mij = (st+dr)/2;
		int s1 = verif(mij);
		if(s1 == k) {
			if(verif(mij - 1) > k)
				return mij;
			else
				dr = mij - 1;
		}
		if(s1 < k)
			dr = mij - 1;
		if(s1 > k)
			st = mij + 1;
	}
}

int main() {

	freopen("transport.in", "r", stdin);
	freopen("transport.out", "w", stdout);

 
scanf("%d %d",&n,&k);
int max1 = 0;
	for(int i = 1; i <= n; i++)
	{
			scanf("%d",&v[i]);
			if(v[i] > max1)
				max1 = v[i];
	}

int result = BS(max1,n*16000);
printf("%d",result);
	return 0;
}