Pagini recente » Cod sursa (job #3217850) | Cod sursa (job #3190748) | Cod sursa (job #2681335) | Cod sursa (job #461178) | Cod sursa (job #1242751)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("lapte.in");
ofstream cout("lapte.out");
int mx, l, n, i, j, k, a[105][2], r[105], m1[105], m2[105], z[105][2];
bool cmp1(const int& x,const int&y)
{
if (a[x][1]==a[y][1])
return a[x][2]<a[y][2]; else
return a[x][1]<a[y][1];
}
bool cmp2(const int& x, const int&y)
{
if (a[x][2]==a[y][2])
return a[x][1]<a[y][1]; else
return a[x][2]<a[y][2];
}
int main()
{
cin>>n>>l;
for (i=1; i<=n; ++i)
{
cin>>a[i][1]>>a[i][2];
m1[i]=i;
m2[i]=i;
}
sort(m1+1, m1+1+n, cmp1);
sort(m2+1, m2+1+n, cmp2);
for (i=1; i<=l; ++i)
{
if ((m1[1])!=(m2[1]))
{
r[m1[1]]+=a[m1[1]][1]; ++z[m1[1]][1];
r[m2[1]]+=a[m2[1]][2]; ++z[m2[1]][2];
}
else
if ((2*m1[1]+2*r[m1[1]]+a[m1[1]][2])<max(m1[2]+r[m1[2]], m2[1]+r[m2[1]]))
{
r[m1[1]]+=a[m1[1]][1]+a[m1[1]][2];
++z[m1[1]][1]; ++z[m1[1]][2];
}
else
{
r[m1[2]]+=a[m1[2]][1]; ++z[m1[2]][1];
r[m2[1]]+=a[m2[1]][2]; ++z[m2[1]][2];
}
for (k=2; k>=1; --k){
while ((a[m1[k]][1]+r[m1[k]]>a[m1[k+1]][1]+r[m1[k+1]]) && (k<n))
{
j=m1[k]; m1[k]=m1[k+1]; m1[k+1]=j;
++k;
}
while (((a[m1[k]][1]+r[m1[k]]==a[m1[k+1]][1]+r[m1[k+1]]) && (a[m1[k]][2]>a[m1[k+1]][2])) && (k<n))
{
j=m1[k]; m1[k]=m1[k+1]; m1[k+1]=j;
++k;
}
}
k=1;
while (((a[m2[k]][2]+r[m2[k]])>(a[m2[k+1]][2]+r[m2[k+1]])) && (k<n))
{
j=m2[k]; m2[k]=m2[k+1]; m2[k+1]=j;
++k;
}
while (((a[m2[k]][2]+r[m2[k]]==a[m2[k+1]][2]+r[m2[k+1]]) && (m2[k]>m2[k+1])) && (k<n))
{
j=m2[k]; m2[k]=m2[k+1]; m2[k+1]=j;
++k;
}
}
mx=r[i];
for (i=1; i<=n; ++i)
mx=max(mx, r[i]);
cout<<mx<<'\n';
for (i=1; i<=n; ++i)
cout<<z[i][1]<<' '<<z[i][2]<<'\n';
return 0;
}