Cod sursa(job #2431992)

Utilizator mirceatlxhaha haha mirceatlx Data 21 iunie 2019 15:30:18
Problema Shop Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("shop.in");
ofstream fout("shop.out");

long long N,C,L,nrm = 0;
struct mond
{
    long long val,nr;
    int used = 0;
    int first;
};
mond v[35];

void Read()
{
    int x;
    fin>>N>>C>>L;
    for(int i = 1;i<=N;i++)
    {
        fin>>x>>v[i].nr;
        v[i].val = pow(2,x);
        v[i].first = i;
    }
}

bool CMP(mond a,mond b)
{
    return a.val > b.val;
}

bool CMP1(mond a,mond b)
{
    return a.first < b.first;
}

void Sorting()
{
    sort(v+1,v+N+1,CMP);
}

int bs(long long val,int n)
{
    int left = 1;
    int right = n;
    int mid=-1;
    int th;
    while(left<=right)
    {
        mid = (left+right)/2;
        if(val*mid == L)
            return mid;
        else
        {
            if(val*mid>L)
                right=mid-1;
            else
            {
                th=mid;
                left=mid+1;
            }
        }

    }
    return th;
}

void Sorting1()
{
    sort(v+1,v+N+1,CMP1);
}
void Print()
{
    fout<<nrm<<"\n";
    for(int i =1 ;i<=N;i++)
        fout<<v[i].used<<" ";
}

void Solve()
{
    int k=1,a;
    while(L!=0)
    {
        a=bs(v[k].val,v[k].nr);
        if(a==-1)
            continue;
        v[k].used=a;
        nrm=nrm+a;
        L=L-v[k].val*a;
        k++;

    }
}

int main()
{
    Read();
    Sorting();
    Solve();
    Sorting1();
    Print();
    return 0;
}