Cod sursa(job #1157192)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 28 martie 2014 12:16:50
Problema Progresii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>

long long p,u,mij,j,n,m,k,l,i,t,spm,pm,vv,x;

long long v[100101];

int main(){
  FILE *f=fopen("progresii.in","r");
  fscanf(f,"%lld %lld %lld %lld",&n,&m,&k,&l);
  for(i=1;i<=n;i++){
    fscanf(f,"%lld",&x);
    v[i]=l-x;
    pm = 1+v[i]/m;
    spm+=pm;
  }
  FILE *g = fopen("progresii.out","w");
  if (spm<=k) {
    //caut cea mai mica valoare t ai t<=m spm-(1+v[i]/t)<=k-(1+v[i]/m)
    for (i=1;i<=n;i++) {
      //caut t

      vv = spm-(1+v[i]/m);


      p=1;u=m;
      while (p<=u) {
	mij=(p+u)/2;
	if (vv>k-(1+v[i]/mij)) {
	  p=mij+1;
	} else u=mij-1;
      }

      t=p;
/*      t=1;
      while (spm-(1+v[i]/(m))>k-(1+v[i]/t)) {
	t++;
	if (t==m+1)
	  break;
      }*/


      fprintf(g,"%lld\n",t);
      spm-=(1+v[i]/m);
      k-=(1+v[i]/t);
    }
  } else
    fprintf(g,"-1");
  fclose(g);
  fclose(f);
  return 0;
}