Pagini recente » Cod sursa (job #3266379) | Cod sursa (job #2251968) | Cod sursa (job #1941399) | Cod sursa (job #3211200) | Cod sursa (job #213490)
Cod sursa(job #213490)
using namespace std;
#include <algorithm>
#include <vector>
#include <cstdio>
#include <utility>
#include <functional>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define N_MAX 1<<7
#define o first.first
#define f first.second
#define s second.first
#define poz second.second
#define IN "lapte.in"
#define OUT "lapte.out"
#define II inline
vector< pair< pair<int,int> ,pair<int,int> > > V(N_MAX),S(N_MAX);
char buffer[1<<10];
int VA,VB,K(-1),N,L;
II int read()
{
int aux(0);
for(;buffer[K] > '9' || buffer[K] < '0';++K);
for(;buffer[K] <= '9' && buffer[K] >= '0';++K)
aux = aux * 10 + buffer[K] - '0';
return aux;
}
II void scan()
{
freopen(IN, "r",stdin);
fread(buffer,1,1<<10,stdin);
fclose(stdin);
N = read();
L = read();
V.resize(N+1);
S.resize(N+1);
FOR(i,1,N)
{
V[i].f = read();
V[i].s = read();
V[i].poz = i;
V[i].o = V[i].f - V[i].s;
}
sort(V.begin()+1, V.end() );
FOR(i,1,N)
S[i].o = V[i].poz;
}
II bool ok(int T)
{
int a(L),b(L);
FOR(i,1,N)
{
S[i].f = min(T / V[i].f,a);
a -= min(T / V[i].f,a);
S[i].s = min( (T - S[i].f * V[i].f) / V[i].s,b);
b -= min( (T - S[i].f * V[i].f) / V[i].s,b);
}
if(a>0 || b>0)
return false;
return true;
}
II void print();
II void solve()
{
int T,step;
for(step = 1; step <= 90; step <<= 1);
for(T = 1; step; step >>= 1)
if(T + step <= 90 && !ok(T+step-1) )
T += step;
ok(T);
sprintf(buffer,"%d\n",T);
sort(S.begin()+1,S.end());
print();
}
II void print()
{
FOR(i,1,N)
sprintf(buffer,"%s%d %d\n",buffer,S[i].f,S[i].s);
freopen(OUT,"w",stdout);
printf("%s",buffer);
fclose(stdout);
}
int main()
{
scan();
solve();
return 0;
}