Pagini recente » Istoria paginii runda/antrenament_1/clasament | Cod sursa (job #453392) | Cod sursa (job #779851) | Cod sursa (job #1050508) | Cod sursa (job #197924)
Cod sursa(job #197924)
#include<stdio.h>
long t[101],c[101],ta[101],tb[101],ca[101],cb[101],sa[101],sb[101],
A,B,l,i,n;
void heapup(long ic);
void heapdown(long ic);
void swap(long i1,long i2);
void beau_a();
void beau_b();
int main()
{
freopen("lapte.in","rt",stdin);
freopen("lapte.out","wt",stdout);
scanf("%ld%ld",&n,&l);
for(i=1;i<=n;i++)
{ scanf("%d%d",&ta[i],&tb[i]);
ca[i]=l;cb[i]=l;t[i]=ca[i]*ta[i]+cb[i]*tb[i];
c[i]=i;heapup(i);A+=l;B+=l;
}
while(A>l&&B>l)
{ if(!ca[1]){ beau_b();continue;}
if(!cb[1]){ beau_a();continue;}
if(ta[1]>tb[1]){ beau_a();continue;}
if(ta[1]<tb[1]){beau_b();continue;}
if(A>B){beau_a();continue;}
beau_b();continue;
}
while(A>l)
{ if(!ca[1])break;beau_a();}
while(B>l)
{ if(!cb[1])break;beau_b();}
for(i=1;i<=n;i++){ sa[c[i]]=ca[i];sb[c[i]]=cb[i];}
printf("%ld\n",t[1]);
for(i=1;i<=n;i++)printf("%ld %ld\n",sa[i],sb[i]);
return 0;
}
void heapup(long ic)
{
long is=ic>>1;
if(!is)return;
if(t[is]<t[ic]){swap(is,ic);heapup(is);}
}
void heapdown(long ic)
{
long is,is1;
is=ic<<1;is1=is|1;
if(is>n)return;
if(is<n)if(t[is1]>t[is])is=is1;
if(t[is]>t[ic]){swap(is,ic);heapdown(is);}
}
void swap(long i1,long i2)
{
long
aux=c[i1];c[i1]=c[i2];c[i2]=aux;
aux=t[i1];t[i1]=t[i2];t[i2]=aux;
aux=ta[i1];ta[i1]=ta[i2];ta[i2]=aux;
aux=tb[i1];tb[i1]=tb[i2];tb[i2]=aux;
aux=ca[i1];ca[i1]=ca[i2];ca[i2]=aux;
aux=cb[i1];cb[i1]=cb[i2];cb[i2]=aux;
}
void beau_a()
{ ca[1]--;t[1]-=ta[1];A--;heapdown(1);}
void beau_b()
{ cb[1]--;t[1]-=tb[1];B--;heapdown(1);}