Pagini recente » Cod sursa (job #1800238) | Cod sursa (job #2880103) | Cod sursa (job #1085517) | Cod sursa (job #360518) | Cod sursa (job #428288)
Cod sursa(job #428288)
#include <stdio.h>
#define Nmax 100005
#define DimMax 1000000
#define InFile "grupuri.in"
#define OutFile "grupuri.out"
int n, k;
int T[Nmax], S[Nmax];
void citire();
long long int determinare();
int verificare (long long int);
int binara(int);
void afisare();
int main()
{
citire();
afisare();
return 0;
}
void citire()
{
int i;
FILE *fin=fopen (InFile, "r");
fscanf (fin, "%d %d\n", &k, &n);
for (i=0; i<n; i++)
{
fscanf (fin, "%d ", &T[i]);
if (i==0) S[i]=T[i];
else
S[i]=S[i-1]+T[i];
}
}
long long int determinare()
{
long long int m, st=0, dr=(long long)Nmax*DimMax, p=n;
while (st<=dr)
{
m=st+(dr-st)/2;
if (verificare(m))
{
p=m;
st=m+1;
}
else
dr=m-1;
}
return p;
}
void afisare()
{
FILE *fout=fopen (OutFile, "w");
fprintf (fout, "%lld\n", determinare());
fclose (fout);
}
int verificare(long long int x)
{
long long int nra=x*k;
int poz=binara (x);
if (poz!=n)
nra-=k*(n-poz-1);
if (nra<=S[poz])
return 1;
return 0;
}
int binara(int x)
{
int m, st=0, dr=n-1, p=n;
while (st<=dr)
{
m=st+(dr-st)/2;
if (T[m]<x)
{
p=m;
st=m+1;
}
else
dr=m-1;
}
return p;
}