Cod sursa(job #253047)

Utilizator albuaAlbu Alexandru albua Data 5 februarie 2009 13:15:02
Problema Progresii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define DMax 100009

long a[DMax];
long n,m,i,in,st,mij;
long long l,k,val[DMax],suma,sum[DMax];

void citire();

int main()
{
	freopen("progresii.in","r",stdin);
	freopen("progresii.out","w",stdout);
	citire();
	for(i=1;i<=n;i++)
		{
			//cautarea binara
			in=1;	st=m;
			while(in<=st)
				{
					mij=(in+st)/2;
					if((1+(l-a[i])/mij) <=(suma+sum[i])) {st=mij-1; val[i]=mij;}
					else in=mij+1;
				}		
			//cautarea binara
				if(val[i]==0) {printf("-1\n"); return 0;}
			suma=suma-((l-a[i]) / val[i] +1)+sum[i];
		}
  for(i=1;i<=n;i++) printf("%lld\n",val[i]);
  return 0;
}

void citire()
{
	long i;
  scanf("%ld %ld %lld %lld\n",&n,&m,&k,&l);
	for(i=1;i<=n;i++)
		  scanf("%ld\n",&a[i]);
	for(i=1;i<=n;i++)
		{
			sum[i]=1+(l-a[i])/m;
			suma+=sum[i];
		}
	suma=k-suma;
}