Cod sursa(job #2552528)

Utilizator stefanpiturStefan Alexandru Pitur stefanpitur Data 20 februarie 2020 22:22:21
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

const int N = 16000;
const int V = 16000;

int sum[N + 1];

bool valid(int h, int k, int n){
	int search = 0;
	int li = 0, ls, mij;
	for(int t=0; t<k; t++){
		search += h;
		li++, ls = n;
		while(li <= ls){
			mij = (li + ls)/2;
			if(sum[mij] > search)
				ls = mij - 1;
			else
				li = mij + 1;
		}
		li--;
		search = sum[li];
	}
	if(li == n)
		return true;
	return false;
}

int cauta(int li, int ls, int k, int n){
	int mij;
	bool fit;
	while(li <= ls){
		mij = (li + ls)/2;
		fit = valid(mij, k, n);
		if(fit == true)
			ls = mij - 1;
		else
			li = mij + 1;
	}
	return li;
}

int main()
{
	int n, k, i, li, ans;
	fin >> n >> k;
	li = V;
	for(i=1; i<=n; i++){
		fin >> sum[i];
		li = min(li, sum[i]);
		sum[i] += sum[i-1];
	}
	ans = cauta(li, sum[n], k, n);
	fout << ans << endl;
	return 0;
}