Cod sursa(job #946536)

Utilizator robert_stefanRobert Stefan robert_stefan Data 4 mai 2013 18:52:44
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<fstream>

using namespace std;

ifstream in("shop.in");
ofstream out("shop.out");

const int MAX=30;

long long N, C, L, NR, a[MAX];

int i;

struct MONEDA{ int ind; long long nr, val;} v[MAX];

void qSort(int st, int dr);

void scrie();

int main()
{
	long long var;
	in>>N>>C>>L;
	for(i=0;i<N;i++)
	{
		in>>var>>v[i].nr;
		v[i].ind=i, v[i].val=1;
		while(var--)
			v[i].val*=C;
	}
	qSort(0, N-1);
	//scrie();
	i=0;
	while(L>0)
	{
		if(v[i].nr==0)
			i++;
		if(L-v[i].val>=0)
			NR++, L-=v[i].val, v[i].nr--, a[v[i].ind]++;
		else i++;
	}
	out<<NR<<'\n';
	for(i=0;i<N;i++)
		out<<a[i]<<' ';
	out<<'\n';
	in.close();
	out.close();
	return 0;
}

void qSort(int st, int dr)
{
	int min=st, max=dr;
	MONEDA pivot=v[(st+dr)/2], tmp;
	while(min<=max)
	{
		while(v[min].val>pivot.val)
			min++;
		while(v[max].val<pivot.val)
			max--;
		if(min<=max)
			tmp=v[min], v[min]=v[max], v[max]=tmp, min++, max--;
	}
	if(st<max)
        qSort(st,max);
    if(dr>min)
        qSort(min,dr);
}

void scrie()
{
	for(int i=0; i<N; i++)
		out<<v[i].ind<<' '<<v[i].val<<' '<<v[i].nr<<'\n';
}