Pagini recente » Cod sursa (job #1854816) | Cod sursa (job #891338) | Cod sursa (job #2916755) | Cod sursa (job #2891051) | Cod sursa (job #478356)
Cod sursa(job #478356)
#include <stdio.h>
#include <queue>
#define Nmax 153
#define x first
#define y second
#define mp make_pair
using namespace std;
queue< pair<int,int> > Q[2];
int A[Nmax],B[Nmax],Caf[Nmax],Cbf[Nmax];
int inq[Nmax][Nmax],last[Nmax][Nmax],ca[Nmax][Nmax],cb[Nmax][Nmax];
int n,L;
int merge(int T ){
int i,j,j2,st; pair< int,int > p;
while( !Q[0].empty() ) Q[0].pop();
while( !Q[1].empty() ) Q[1].pop();
for(i=1;i<=L;++i) for(j=1;j<=L;++j) inq[i][j]=0;
Q[0].push(mp(0,0)); st=0;
for(i=1;i<=n;++i){
while( ! Q[st].empty() ){
p=Q[st].front(); Q[st].pop();
if( inq[L][L] ) return 1;
for(j=0; j*A[i]<=T && p.x+j<=L; ++j ){
j2 = (T-j*A[i])/B[i];
if( p.y+j2>L )j2=L-p.y;
if( j==0 && j2==0 ) continue;
if( ! inq[p.x+j][p.y+j2] ){
inq[p.x+j][p.y+j2]=1;
last[p.x+j][p.y+j2]=i, ca[p.x+j][p.y+j2]=j, cb[p.x+j][p.y+j2]=j2;
Q[st^1].push(mp(p.x+j,p.y+j2));
}
}
}
st^=1;
}
if( inq[L][L] ) return 1;
return 0;
}
void afis(int T ){
int i,ii,j;
i=L, j=L;
while( i>0 || j>0 ){
Caf[last[i][j]]=ca[i][j], Cbf[last[i][j]]=cb[i][j];
ii=i;
i-=ca[i][j], j-=cb[ii][j];
}
printf("%d\n",T);
for(i=1;i<=n;++i)
printf("%d %d\n",Caf[i],Cbf[i]);
}
int main(){
int i,l,r,mij,rez;
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
scanf("%d%d",&n,&L);
for(i=1;i<=n;++i) scanf("%d%d",&A[i],&B[i]);
l=0, r=150;
while( l<=r ){
mij=l+(r-l)/2;
if( merge(mij) ) rez=mij, r=mij-1;
else l=mij+1;
}
afis(rez);
fclose(stdin); fclose(stdout);
return 0;
}