Cod sursa(job #41272)

Utilizator rchioreanRadu Chiorean rchiorean Data 28 martie 2007 09:30:27
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
long long l;
long i,a[30],backup[30],b[30], aux, bul , n,c,nrmin, contor,val[30],j,poz[30];
FILE *f;
int main(void){ 
    f=fopen("shop.in", "rt");
    fscanf(f, "%ld %ld %lld", &n, &c, &l);
    for(i=1;i<=n;i++){fscanf(f, "%ld %ld", &a[i], &b[i]); poz[i]=i; backup[i]=b[i]; }
    bul = 1;
    while(bul==1){
     bul=0;
     for(i=1;i<=n-1;i++)
      if(a[i]>a[i+1]){
			aux = a[i];
			a[i] = a[i+1];
			a[i+1] = aux;
			aux = b[i];
			b[i] = b[i+1];
			b[i+1] = aux;
			aux=poz[i];
			poz[i]=poz[i+1];
			poz[i+1]=aux;
			bul=1;
			}

     }
     for(i=1;i<=n;i++){
			val[i] = 1;
			for(j=1;j<=a[i];j++)val[i] = val[i] * c;
			}
    contor=n+1;
    nrmin= 0;
    while(l!=0){

		 if((l>=val[contor])&&(b[contor]!=0)){b[contor]--; l=l-val[contor]; nrmin++;}else{ contor--;}



	       }

  f=fopen("shop.out", "wt");
  fprintf(f,"%ld \n", nrmin);
  for(i=1;i<=n; i++)
   for(j=1;j<=n;j++)
    if(poz[j]==i)fprintf(f, "%ld ", backup[i]-b[j]);
  fclose(f);
    return 0; }