Cod sursa(job #742357)

Utilizator harababurelPuscas Sergiu harababurel Data 29 aprilie 2012 20:12:33
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;

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

long long ridica_la_putere(int a, int b) {
	int i;
	long long rez=1;
	for(i=1; i<=b; i++) rez*=a;
	return rez;
}
int cmp1( pair < pair <int, int >, int > x, pair < pair <int, int>, int> y) {
	if(x.first.first>y.first.first) return 0;
	return 1;
}

int main() {
	long long n, l, c, i, j, valoare, cantitate, indice, folosite=0, putere, fol[35], cat;
	
	vector < pair < pair < int, int >, int > > v;
	
	f>>n>>c>>l;
	for(i=1; i<=n; i++) {
		fol[i]=0;
		f>>valoare>>cantitate;
		indice=i;
		v.push_back(make_pair( make_pair(valoare,cantitate), indice));
	}
	
	sort(v.begin(), v.end(), cmp1); //sortez dupa valoare;
	
	i=n;
	while(l>0) {
		i--;
		putere = ridica_la_putere(c, v[i].first.first);
		
		cat = v[i].first.second; //toata cantitatea
		if( l/putere < cat) cat = l/putere; //in caz ca nu pot folosi toata cantitatea
		
		l-= putere*cat;
		folosite+=cat;
		fol[v[i].second]+=cat;
		
		
		/*while(l>=putere && v[i].first.second > 0) {
			//cout<<putere<<" ";
			l-=putere;
			folosite++;
			v[i].first.second--; //scade cantitatea
			
			fol[v[i].second]++; //folosite[indice] creste
		}*/
		
		
		
		
	}
	g<<folosite<<"\n";
	for(i=1; i<=n; i++) {
		g<<fol[i]<<" ";
	}
	g<<"\n";
		
	
	
	//for(i=0; i<v.size(); i++) {
	//	g<<v[i].first.first<<" "<<v[i].first.second<<" "<<v[i].second<<"\n";
	//}
	
	
	f.close();
	g.close();
	return 0;
}