Cod sursa(job #2107420)

Utilizator brczBereczki Norbert Cristian brcz Data 17 ianuarie 2018 10:12:58
Problema Grupuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<bits/stdc++.h>

#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define sz size
#define pb push_back
#define mp make_pair
#define bg begin
#define nd end
using namespace std;

#define int long long

const int maxn = 100003;
const int maxk = 1003;

int n,k;
int a[maxn];

bool check(int x) {

	int sum = 0;
	int rest = 0;
	int adder = 0;
	for(int i=0;i<n;++i) {
		adder = a[i];
		if(adder > x) adder = x;
		sum += (rest + adder) / x;
		rest = (rest + adder) % x;
		if(sum >= k) return true;
	}
	return false;
}


int32_t main(){

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

	ios_base::sync_with_stdio(false);
	cin.tie(0);

	cin >> k >> n;
	int total = 0;
	for(int i=0;i<n;++i) {
		cin >> a[i];
		total += a[i];
	}
	int lo = 0;
	int hi = total / k;
	while(hi - lo > 1) {
		// cout << lo << ' ' << hi << '\n';
		int mid = (lo + hi) / 2;
		if(check(mid))
			lo = mid;
		else
			hi = mid;
	}
	if(check(hi))
		cout << hi << '\n';
	else
		cout << lo << '\n';


	return 0;
}