Cod sursa(job #165140)

Utilizator katakunaCazacu Alexandru katakuna Data 25 martie 2008 15:10:58
Problema Progresii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>

long long q,j,s,n,m,k,l,i,x,y;

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+1;  //cati metrii parcurge fiecare

  if(v[i]%m==0)
  y=v[i]/m;

  else
  y=v[i]/m+1;

  s+=y;   //s - numarul minim de litrii care se pot consuma

  }


fclose(f);

FILE *g=fopen("progresii.out","w");

int S=k;

  for(i=1;i<=n;i++){

  if(v[i]%m==0)
  y=v[i]/m;

  else
  y=v[i]/m+1;

  s-=y;


  x=k-s;     // x - numarul maxim de litrii care pot fi consumato de persoana i



  q=v[i]/x;


  if(q>m)q=m;
  if(q==0)q=1;


     for(j=q;j<=m;j++){     // cautam cel mai mic j (vit persoane i)

     if(v[i]%j!=0)
     y=(v[i]/j)+1;

     else
     y=(v[i]/j);

       if(S-(y)>=s)
       break;


     }


  S-=y;
  k=S;

  fprintf(g,"%lld\n",j);
  }




fclose(g);

return 0;
}