Cod sursa(job #2857724)

Utilizator gabriel10tm@gmail.comGabriel Marian [email protected] Data 26 februarie 2022 10:52:50
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.14 kb
#pragma region
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#include <unordered_set>
#include <unordered_map>
#include <map>
typedef unsigned long long ull;
typedef long long ll;
typedef unsigned int uint;
#define endl '\n'
using namespace std;
#if 1
#include <fstream>
ifstream fin("transport.in");
ofstream fout("transport.out");
#define cin fin
#define cout fout
#endif
#pragma endregion

int n, k;
int a[16003];
int mxvol = 0;
long long sum = 0;
bool Simulare(int c)
{
	if (c < mxvol)
		return false;
	ll trans = 0;
	ll s = 0;
	for (int i = 0; i < n; i++)
	{
		if (s + a[i] > c)
		{
			trans++;
			s = a[i];
			continue;
		}
		s += a[i];
	}
	if (s != 0)
		trans++;
	return trans <= k;
}
int Cb()
{
	int cant = INT_MAX;
	int st = mxvol, dr = sum;
	while (st <= dr)
	{
		int md = (st + dr) / 2;
		if (Simulare(md))
		{
			dr = md-1;
			cant = min(cant, md);
		}
		else
		{
			st = md+1;
		}
	}
	return cant;
}

int main()
{
	cin >> n >> k;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
		mxvol = max(mxvol, a[i]);
		sum += a[i];
	}
	cout << Cb();
}

//char sirr[1602];
//char stiva[1602];
//char fisiere[1602][1602];
//int main()
//{
//
//	cin >> sirr;
//	char* sir = sirr;
//	int cntf = 0;
//	while (*sir)
//	{
//		if (isupper(*sir))
//		{
//			char* inisir = sir;
//			while (*sir != '(')
//				sir++;
//			sir++;
//			*(sir - 1) = 0;
//			strcat(stiva, inisir);
//			strcat(stiva, "\\");
//		}
//		else if (islower(*sir))
//		{
//			char* inisir = sir;
//			while (*sir != ')' && *sir!=',' && *sir)
//				sir++;
//			if (*sir == 0)
//				continue;
//			bool wasPar = *sir == ')';
//			sir++;
//			*(sir - 1) = 0;
//			strcat(fisiere[cntf], stiva);
//			strcat(fisiere[cntf], inisir);
//			if (wasPar)
//				--sir,;
//			cntf++;
//		}
//		else if (*sir == ',')
//		{
//			sir++;
//		}
//		else if (*sir == ')')
//		{
//			char* lpos = strrchr(stiva, '\\');
//			*lpos = 0;
//			char* plpos = strrchr(stiva, '\\');
//			*(plpos + 1) = 0;
//			sir++;
//		}
//	}
//	for (int i = 0; i < cntf; i++)
//	{
//		cout << fisiere[i] << endl;
//	}
//}