Pagini recente » Cod sursa (job #2719372) | Cod sursa (job #2357990) | Cod sursa (job #338746) | Cod sursa (job #3208006) | Cod sursa (job #854718)
Cod sursa(job #854718)
#include <stdio.h>
#include <algorithm>
#define NMax 110
using namespace std;
const char IN[]="lapte.in",OUT[]="lapte.out";
struct copil{
int x,y;
} v[NMax], r[NMax];
int N,L,Rez;
int idx[NMax];
bool test(int T)
{
int i,lA=0,lB=0,a;
for (i=1;i<=N;++i)
r[idx[i]].x=T/v[idx[i]].x,
lA+=r[idx[i]].x,
r[idx[i]].y=0;
for (i=1;i<=N && lB<L;++i)
{
a=lB;
for (;r[idx[i]].x>=0 && lB<L;--r[idx[i]].x){
r[idx[i]].y=(T-r[idx[i]].x*v[idx[i]].x)/v[idx[i]].y;
lB=a+r[idx[i]].y;
if (lB==L || !r[idx[i]].x) break;
}
}
for (i=1,lA=0;i<=N;++i) lA+=r[idx[i]].x;
return lA>=L && lB>=L;
}
int search()
{
int i,step;
for (step=1;step<NMax;step<<=1);
for (i=NMax;step;step>>=1)
if (i-step>0 && test(i-step))
i-=step;
return i;
}
bool cmp(int x,int y){
return v[x].x/(double)v[x].y<v[y].x/(double)v[y].y;
}
int main()
{
int i;
freopen(IN,"r",stdin);
scanf("%d%d",&N,&L);
for (i=1;i<=N;++i) scanf("%d%d",&v[i].x,&v[i].y);
fclose(stdin);
for (i=1;i<=N;++i) idx[i]=i;
sort(idx+1,idx+N+1);
Rez=search();
test(Rez);
freopen(OUT,"w",stdout);
printf("%d\n",Rez);
for (i=1;i<=N;++i) printf("%d %d\n",r[i].x,r[i].y);
fclose(stdout);
return 0;
}