Pagini recente » Cod sursa (job #74067) | Cod sursa (job #782374) | Cod sursa (job #1759110) | Cod sursa (job #3250348) | Cod sursa (job #741392)
Cod sursa(job #741392)
#include <fstream>
#include <iostream>
#include <algorithm>
#define ll long long
#define nmax 35
#define val first
#define ap second
using namespace std;
ll n, c, l, frec[nmax], Min;
pair<ll, pair<ll, ll> > v[nmax];
ifstream f("shop.in");
ofstream g("shop.out");
ll putere(ll a, ll b){
ll rez = 1;
while(b){
if( b % 2 == 1) rez = rez * a;
a = a * a;
b = b / 2;
}
return rez;
}
void citeste(){
f >> n >> c >> l;
for(int i=1; i<=n; i++){
int a,b;
f >> a >> b;
v[i].val = putere(c,a);
v[i].ap.val = b;
v[i].ap.ap = i;
}
sort(v+1, v+n+1);
}
void rezolva(){
for(int i=n; i; i--){
if (v[i].val > l) continue;
frec[i] = 1;
for(; l && frec[i]<=v[i].ap.val && v[i].val<=l; l-=v[i].val,++frec[i]);
//while (frec[i] <= v[i].val && l && v[i].val<=l){
//if (l<0) l += v[i].val, --frec[i];
if (frec[i] > v[i].ap.val||v[i].val> l){
--frec[i];
}
cout << frec[i] << "\n";
Min += frec[i];
}
}
void scrie(){
g << Min << "\n";
for(int i=1; i<=n; i++) g << frec[v[i].ap.ap] << " ";
}
int main(){
citeste();
rezolva();
scrie();
f.close();
g.close();
return 0;
}