Pagini recente » Cod sursa (job #258509) | Cod sursa (job #525551) | Cod sursa (job #2974349) | Cod sursa (job #646682) | Cod sursa (job #2431992)
#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;
}