Mai intai trebuie sa te autentifici.
Cod sursa(job #1324964)
Utilizator | Data | 22 ianuarie 2015 23:02:58 | |
---|---|---|---|
Problema | Grupuri | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.03 kb |
#include <cstdio>
#include <fstream>
#define nmax 100005
using namespace std;
FILE *f=fopen("grupuri.in","r");
FILE *g=fopen("grupuri.out","w");
int n,k,v[nmax];
long long s,st,dr,mijl,sol;
bool ok(int r)
{
int i,j,x,y;
x=0;y=0;
for (i=n;i>=1;i--) {
if (v[i]>=r) {
x++;
} else {
y+=v[i];
if (y>=r) {
y-=r;
x++;
}
}
}
if (x>=k) return true;
return false;
}
int main()
{
int i,j;
fscanf(f,"%d %d",&k,&n);
for (i=1;i<=n;i++) {
fscanf(f,"%d",&v[i]);
s+=v[i];
}
st=0;dr=s/k;
while (st<=dr) {
mijl=(st+dr)>>1;
if (ok(mijl)==true) {
st=mijl+1;
sol=mijl;
}
else
dr=mijl-1;
}
fprintf(g,"%lld",sol);
return 0;
}