Pagini recente » Cod sursa (job #997491) | Cod sursa (job #30722) | Cod sursa (job #1358457) | Cod sursa (job #1941536) | Cod sursa (job #609402)
Cod sursa(job #609402)
#include <stdio.h>
#define MAX 100000
int a[MAX], n, k;
// Din cate am vazut eu, lumea nu practica definirea functiilor la inceputul programului si
// implementarea lor dupa main. In general, functiile sunt declarate si implementate direct inainte
// de main. E o observatie de stil (deci nu e importanta), dar cred ca multa lume ar considera
// abordarea asta ciudata.
int bin_search(int, int);
int test(int);
int main()
{
long long sum = 0;
// warning: sol neinitializat
// Daca compilatorul da erori ca anumite variabile sunt neinitializate, e bine sa-l asculti si
// sa le initializezi cu ceva (chiar daca stii din restrictii ca variabila va primi o valoare).
int i, m, st, dr, sol = 0;
freopen("grupuri.in", "r", stdin);
freopen("grupuri.out", "w", stdout);
scanf("%d %d", &k, &n);
for(i=0;i<n;++i)
{
scanf("%d", &a[i]);
sum += a[i];
}
st = a[n-k];
dr = sum/k;
while(st<=dr)
{
m = (st + dr)/2;
if(test(m))
{
st = m+1;
sol = m;
}
else
{
dr = m-1;
}
}
printf("%d", sol);
return 0;
}
int test(int nrg)
{
int col = 0, lin = 0, i = 0;
while(col < k)
{
if(i == n)
{
return 0;
}
if(a[i] >= nrg)
{
col += n-i;
if(col >= k)
{
return 1;
}
return 0;
}
else
{
lin += a[i];
if (lin >= nrg) {
++col;
lin -= nrg;
}
// col = col + (lin + a[i]) / nrg;
// lin = (lin + a[i]) % nrg;
}
i++;
}
return 1;
}