Cod sursa(job #2107425)

Utilizator brczBereczki Norbert Cristian brcz Data 17 ianuarie 2018 10:16:06
Problema Grupuri Scor 92
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 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;

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

int n,k;
int a[maxn];

bool check(ll x) {

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


	return 0;
}