Cod sursa(job #3189380)

Utilizator CraiuAndreiCraiu Andrei David CraiuAndrei Data 5 ianuarie 2024 00:09:26
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");

int a[100005], n, k;

int Test(int x)
{
	int s = 0, cnt = 1, i;
	for(i=1;i<=n;i++)
	{
		if (a[i] > x)return 0;
		if (a[i] + s <= x)s += a[i];
		else
		{
			cnt++;
			s = a[i];
		}
	}
	if (cnt <= k)return 1;
	return 0;
}

int CB(int st, int dr)
{
	int mij,p=1;
	while (st <= dr)
	{
		mij = (st + dr) / 2;
		if (Test(mij) == 1)
		{
			dr = mij - 1;
			p = mij;
		}
		else st = mij + 1;
	}
	return p;
}

int main()
{
	int i,maxim=0;
	long long s=0;
	fin >> n >> k;
	for(i=1;i<=n;i++)
	{
		fin >> a[i];
		if (maxim > a[i])maxim = a[i];
		s += a[i];
	}
	fout<<CB(maxim, s);
	return 0;
}