Pagini recente » Cod sursa (job #543507) | Cod sursa (job #1123606) | Cod sursa (job #1108505) | Cod sursa (job #653080) | Cod sursa (job #2829551)
#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int const N = 101;
int n , l;
pair<pii , int> v[N];
pii sol[N];
bool c1(pair<pii , int> A , pair<pii , int> B){
return A.first.first - A.first.second < B.first.first - B.first.second;
}
bool c2(pair<pii , int> A , pair<pii , int> B){
return A.second < B.second;
}
bool eval(pii x[] , int t){
int sA = l , sB = 0;
for(int i = 1 ; i <= n ; ++ i){
int x = min(sA , t / v[i].first.first);
sA -= x;
sol[i].first = x;
x = max(0 , (t - x * v[i].first.first) / v[i].first.second);
sB += x;
sol[i].second = x;
}
return !sA && sB >= l;
}
int main()
{
fin >> n >> l;
for(int i = 1 ; i <= n ; ++ i){
fin >> v[i].first.first >> v[i].first.second;
v[i].second = i;
}
sort(v + 1 , v + 1 + n , c1);
int p = (1 << 6) , r = 0;
while(p){
if(!eval(sol , p + r))
r += p;
p >>= 1;
}
++ r;
eval(sol , r);
for(int i = 1 ; i <= n ; ++ i)
v[i].first = sol[i];
sort(v + 1 , v + 1 + n , c2);
fout << r << '\n';
for(int i = 1 ; i <= n ; ++ i)
fout << v[i].first.first << ' ' << v[i].first.second << '\n';
return 0;
}