Pagini recente » Cod sursa (job #2142775) | Cod sursa (job #3229538) | Cod sursa (job #2928114) | Cod sursa (job #1801891)
#include <bits/stdc++.h>
#define INF 1000000000000000
#define NMax 102
#define ll long long
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
struct info2{
ll x,y,ind;
};
info2 v[NMax],a[NMax],b[NMax];
ll n,l;
bool verif(ll x){
ll lA = l, lB = l;
for(ll i = 1; i <= n; ++i){
v[i].x = 0;v[i].y = 0;
}
for(ll i = 1; i <= n && lA; ++i){
if(lA - (x / a[i].x) > 0){
lA -= (x / a[i].x);
v[a[i].ind].x = (x / a[i].x);
}else{
v[a[i].ind].x = lA;
lA = 0;
}
}
for(ll i = 1; i <= n && lB; ++i){
ll w = (x - v[b[i].ind].x * b[i].x);
if(lB - (w / b[i].y) > 0){
lB -= (w / b[i].y);
v[b[i].ind].y = (w / b[i].y);
}else{
v[b[i].ind].y = lB;
lB = 0;
}
}
if(lA <= 0 && lB <= 0)
return 1;
for(ll i = 1; i <= n; ++i){
v[i].x = 0;v[i].y = 0;
}
lA = l, lB = l;
for(ll i = 1; i <= n && lB; ++i){
if(lB - (x / b[i].y) > 0){
lB -= (x / b[i].y);
v[b[i].ind].y = (x / b[i].y);
}else{
v[b[i].ind].y = lB;
lB = 0;
}
}
for(ll i = 1; i <= n && lA; ++i){
ll w = (x - v[a[i].ind].y * a[i].y);
if(lA - (w / a[i].x) > 0){
lA -= (w / a[i].x);
v[a[i].ind].x = (w / a[i].x);
}else{
v[a[i].ind].x = lA;
lA = 0;
}
}
if(lA <= 0 && lB <= 0)
return 1;
return 0;
}
void cautbin(ll lo,ll hi){
ll mid;
while(lo <= hi){
mid = (lo + hi) / 2;
ll ok2 = verif(mid - 1);
ll ok1 = verif(mid);
if(ok1 == 1 && ok2 == 0){
g << mid << '\n';
for(ll i = 1; i <= n; ++i){
g << v[i].x << ' ' << v[i].y << '\n';
}
return;
}else
if(ok1 == 1){
hi = mid - 1;
}else
if(ok2 == 0){
lo = mid + 1;
}
}
}
bool cmp1(info2 x, info2 y){
return(x.x < y.x);
}
bool cmp2(info2 x, info2 y){
return(x.y < y.y);
}
int main()
{
f >> n >> l;
for(ll i = 1; i <= n; ++i){
f >> a[i].x >> a[i].y; a[i].ind = i;
b[i].x = a[i].x; b[i].y = a[i].y; b[i].ind = i;
}
sort(a + 1, a + 1 + n,cmp1);
sort(b + 1, b + 1 + n,cmp2);
cautbin(1,INF);
return 0;
}