Cod sursa(job #1142427)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 13 martie 2014 20:35:55
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("shop.in");
ofstream fout("shop.out");
struct shop
{
   unsigned long long 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;
}
unsigned long long putere(unsigned long long u,unsigned long long x)
{
    unsigned long long result=1;
    unsigned long long p=x;
    unsigned 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);
    unsigned n,i,j,sol=0,put;
    unsigned long long c,d,e;
    fin>>n>>put>>c;
    for(i=0;i<n;i++)
    {
        fin>>v[i].a>>v[i].b;
        v[i].x=i;
    }
    sort(v,v+n,comp1);
    for(i=n-1;i>=0;i--)
    {   e=d=putere(put,v[i].a);
        if(d==c)
        {
            sol++;
            v[i].y=1;
            c=0;
            break;
        }
        else if(d<c)
        {
            for(j=1;j<v[i].b&&d<=c;j++) d+=e;
            if(d>c||j>v[i].b) d-=e,j--;
            sol+=j;
            v[i].y=j;
            c-=d;
        }
        if(c==0) break;
    }
    sort(v,v+n,comp2);
    fout<<sol<<"\n";
    for(i=0;i<n;i++) fout<<v[i].y<<" ";
}