Cod sursa(job #1242751)

Utilizator LycrsTrifan Tamara Lycrs Data 14 octombrie 2014 22:57:07
Problema Lapte Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 kb
#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;
}