Cod sursa(job #1570253)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 16 ianuarie 2016 12:01:12
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#define MAXA 32
long long p[MAXA+1];
int A[MAXA],B[MAXA],poz[MAXA],v[MAXA];
inline void swap(int b,int e,int *x){
    int aux=x[b];
    x[b]=x[e];
    x[e]=aux;
}
void myqsort(int begin,int end){
     int b=begin,e=end,pivot=A[(b+e)/2];
     while(b<=e){
         while(A[b]<pivot) b++;
         while(A[e]>pivot) e--;
         if(b<=e){
            swap(b,e,A);
            swap(b,e,B);
            swap(b,e,poz);
            b++;e--;
         }
     }
     if(begin<e) myqsort(begin,e);
     if(b<end) myqsort(b,end);
}
int main(){
    FILE*fi,*fout;
    int i,n,con;
    long long c,l;
    fi=fopen("shop.in" ,"r");
    fout=fopen("shop.out" ,"w");
    fscanf(fi,"%d%lld%lld" ,&n,&c,&l);
    p[0]=1;
    for(i=1;i<=MAXA;i++)
      p[i]=p[i-1]*c;
    for(i=0;i<n;i++){
        fscanf(fi,"%d%d" ,&A[i],&B[i]);
        poz[i]=i;
    }
    myqsort(0,n-1);
    i=n-1;
    int con1=0;
    while(l>0){
        con=0;
        while(B[i]>0&&l>=p[A[i]]){
           l-=p[A[i]];
           B[i]--;
           con++;
        }
        v[poz[i]]=con;
        con1+=con;
        i--;
    }
    fprintf(fout,"%d\n" ,con1);
    for(i=0;i<n;i++)
       fprintf(fout,"%d " ,v[i]);
    fclose(fi);
    fclose(fout);
    return 0;
}