Cod sursa(job #38412)

Utilizator petrecgClinciu Glisca Petre petrecg Data 25 martie 2007 19:28:47
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#include <math.h>
FILE *f,*g;long double l,q,s,ss;long z,c,a[31],b[31],d[200],i,j,n,r,v[31];
int main()
{f=fopen("shop.in","r");fscanf(f,"%ld%ld%Lf",&n,&c,&l);
 for(i=1;i<=n;i++){fscanf(f,"%ld%ld",&z,&b[i]);a[z+1]=b[i];}fclose(f);
 for(i=1;i<=n;i++)
 q=l;while(q){d[++r]=fmod(q,2);q=floorl(q/2);}
 for(i=r;i>=1;i--)
  {s=0;if(d[i])
	while(s<d[i]*pow(c,i-1))
	 {for(j=i;j>=1&&s<d[i]*pow(c,i-1);j--)
	   if(s+a[j]*pow(c,j-1)<=d[i]*pow(c,i-1))
	    {ss+=a[j];v[j]+=a[j];s+=a[j]*pow(c,j-1);a[j]=0;}
	    else {ss+=floorl((d[i]*pow(c,i-1)-s)/pow(c,j-1));
		  v[j]+=floorl((d[i]*pow(c,i-1)-s)/pow(c,j-1));
		  a[j]-=floorl((d[i]*pow(c,i-1)-s)/pow(c,j-1));
		  s+=floorl((d[i]*pow(c,i-1)-s)/pow(c,j-1))*pow(c,j-1);
		 }
	  }
  }
 g=fopen("shop.in","r");fscanf(f,"%ld%ld%Lf",&n,&c,&l);
 f=fopen("shop.out","w");fprintf(f,"%.0Lf\n",ss);
 for(i=1;i<=n;i++)
  {fscanf(g,"%ld%ld",&z,&b[i]);fprintf(f,"%ld ",v[z+1]);}
 fclose(g);
 fclose(f);
 return 0;
}