Cod sursa(job #1142404)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 13 martie 2014 20:15:19
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <algorithm>
using namespace std;
struct shop
{
    int a,b,x,y;
} v[31];
bool comp1(shop u,shop j)
{
    return u.a<j.a;
};
bool comp2(shop u,shop j)
{
    return u.x<j.x;
}
long long putere(int u,int x)
{
    long long result=1;
    long long p=x;
    long long n=u;
    while(p)
    {
        if(p&1) result=result*n;
        p>>=1;
        n=n*n;
    }
    return result;
}
int main()
{
    freopen("shop.in","r",stdin);
    freopen("shop.out","w",stdout);
    int n,i,j,sol=0,put;
    long long c,d;
    scanf("%d%d%I64d",&n,&put,&c);
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&v[i].a,&v[i].b);
        v[i].x=i;
    }
    sort(v,v+n,comp1);
    for(i=n-1;i>=0;i--)
    {   d=putere(put,v[i].a);
        if(d==c)
        {
            sol++;
            v[i].y=1;
            break;
        }
        else if(d<c)
        {
            for(j=1;j<v[i].b&&d<=c;j++) d+=putere(put,v[i].a);
            if(d>c||j>v[i].b) d-=putere(put,v[i].a),j--;
            sol+=j;
            v[i].y=j;
            c-=d;
        }
        if(c==0) break;
    }
    sort(v,v+n,comp2);
    printf("%d\n",sol);
    for(i=0;i<n;i++) printf("%d ",v[i].y);
}