Pagini recente » Cod sursa (job #1862671) | Cod sursa (job #130995) | Cod sursa (job #2402987) | Cod sursa (job #1813087) | Cod sursa (job #742357)
Cod sursa(job #742357)
#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;
}