Cod sursa(job #2770918)

Utilizator Darius_CDarius Chitu Darius_C Data 24 august 2021 08:47:26
Problema Transport Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
// Transport.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <fstream>
#pragma warning(disable: 4996)
#define DIM 16006
using namespace std;

FILE* fin, * fout;

int N, A[DIM], K;
int upper_bound = 0; // =Sum(A[1],...,A[N])
int C;

static inline void Read()
{
	fscanf(fin, "%d %d", &N, &K);
	for (int i = 1; i <= N; i++)
	{
		fscanf(fin, "%d", &A[i]);
		upper_bound += A[i];
	}
}

bool Condition(int C)
{
	int ret = 0, stiva = 0;
	for (int i = 1; i <= N; i++)
		if (A[i] > C)
			return false;

	for (int i = 1; i <= N; i++)
	{
		if (stiva + A[i] >= C || i == N)
		{
			stiva = 0;
			ret++;
		}
		stiva += A[i];
	}
	return (ret <= K);
}

static inline void Solve()
{
	// Cautare Binara discretă pe capacitatea C
	int st = 1, dr = upper_bound;
	while (st <= dr)
	{
		int mij = (st + dr) / 2;
		if (Condition(mij)) {
			C = mij;
			dr = mij - 1;
		}
		else
			st = mij + 1;
	}
	fprintf(fout, "%d", C);
}

int main()
{
	fin = fopen("transport.in", "r");
	fout = fopen("transport.out", "w");
	Read();
	Solve();
	fclose(fin);
	fclose(fout);
	return 0;
}