Cod sursa(job #2073120)

Utilizator edward.codarceaEdward Codarcea edward.codarcea Data 22 noiembrie 2017 18:40:17
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <stdio.h>
#include <math.h> 

void quickSort(long long arr[], long long brr[], int crr[], int left, int right) {
      int i = left, j = right;
      long long tmp;
      int tmp2;
      long long pivot = arr[(left + right) / 2];
 
      /* partition */
      while (i <= j) {
            while (arr[i] > pivot)
                  i++;
            while (arr[j] < pivot)
                  j--;
            if (i <= j) {
                  tmp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = tmp;
                  tmp = brr[i];
                  brr[i] = brr[j];
                  brr[j] = tmp;
                  tmp2 = crr[i];
                  crr[i] = crr[j];
                  crr[j] = tmp2;
                  i++;
                  j--;
            }
      };
 
      /* recursion */
      if (left < j)
            quickSort(arr, brr, crr, left, j);
      if (i < right)
            quickSort(arr, brr,crr, i, right);
}
 
int main(){
	long long valM[30], nrM[30], l, nrFol;
	int n, c, folM[30], id[30], i;
	
	freopen("shop.in", "r", stdin);
	freopen("shop.out", "w", stdout);
	scanf("%d %d %lld", &n, &c, &l);
	for(i=0;i<n;i++){
		scanf("%lld %lld", &valM[i], &nrM[i]);
		folM[i]=0;
		id[i]=i;
		//valM = (long long) pow((double) c, (double) valM[i]);
	}
	quickSort(valM, nrM, id, 0, n-1);
	nrFol=0;
	for(i=0;i<n;i++){
		valM[i] = (long long) pow((double) c, (double) valM[i]);
		folM[id[i]]=l/valM[i];
		if(folM[id[i]]>nrM[i]){
			folM[id[i]]=nrM[i];
		}
		l-=folM[id[i]]*valM[i];
		nrFol+=folM[id[i]];
	}
	printf("%lld\n",nrFol);
	for(i=0;i<n;i++){
		printf("%lld ", folM[i]);			
	}
	return 0;
}