Cod sursa(job #183986)

Utilizator albuaAlbu Alexandru albua Data 22 aprilie 2008 20:53:11
Problema Progresii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#define MAX 1101

FILE *f,*g;
long n,m,i,j,sum[MAX], a[MAX],ratia,ls,ld,mijloc,step;
long k,l;

void precalculeaza(void)
{
  long i,j;
  for(i=1;i<n;i++)
	{
	  for(j=i+1;j<=n;j++)
		sum[i]=sum[i]+(l-a[j])/m+1;
	}
}

long calculeaza(long x, long ratia)
{
  long contor=0,i;
  for(i=a[x];i<=l;i+=ratia) contor++;
  return contor;
}

int main()
{
  f=fopen("progresii.in","r");
  g=fopen("progresii.out","w");
  fscanf(f,"%ld %ld %ld %ld\n",&n,&m,&k,&l);
  for(i=1;i<=n;i++) fscanf(f,"%ld\n",&a[i]);
  precalculeaza();
  for(j=1;j<=n;j++)
    {
      for (step = 1; step < m; step <<= 1);
      for (i = 0; step; step >>= 1)
	 if (i + step < m &&  (l-a[j])/step+1+sum[j]>=k)
	   i += step;
      ratia=i;
/*	  ls=1;
	  ld=m;
	  while(ls!=ld)
	    {
		  mijloc=(ls+ld)/2;
		  if((l-a[i])/mijloc+1+sum[i]>k)
		    ls=mijloc+1;
		  else
		    ld=mijloc;
		}
*/
	  k=k-(l-a[j])/ratia-1;
	  fprintf(g,"%ld\n",ratia);
	}
  fclose(f);  fclose(g);
  return 0;
}