Cod sursa(job #1836626)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 28 decembrie 2016 15:31:43
Problema Lacate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include<bits/stdc++.h>
#define dim 100005
using namespace std;
int v[52][505];
int x,y,nj,n,elevi,imax1,imax2,max1,max2,l[52],jmax,poz;
bool cmp(int a,int b)
{
    return a>b;
}
inline int max(int a,int b)
{
    return a>b?a:b;
}
int main()
{
    freopen("concurs2.in","r",stdin);
    freopen("concurs2.out","w",stdout);
   scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&x,&y);
        v[x][l[x]]=y;
        l[x]++;
        jmax=max(jmax,x);
    }
    for(int i=1;i<=jmax;i++)
    {
        if(l[i]) nj++;
    }
    printf("%d\n",nj);
    for(int i=1;i<=jmax;i++)
    {
        if(l[i]) printf("%d ",l[i]);
    }
    printf("\n");
    for(int i=1;i<=jmax;i++)
    {
        sort(v[i],v[i]+l[i],cmp);
        //sort(v[i].begin(),v[i].end(),cmp);
    }
    elevi=0;
    while((n-elevi)>1)
    {
        imax1=0;
        imax2=0;
        max1=0;
        max2=0;
        for(int i=1;i<=jmax;i++)
        {
            if(l[i]>max1)
            {
                max2=max1;
                imax2=imax1;
                max1=l[i];
                imax1=i;
            }
                else
            if(l[i]>max2)
            {
                max2=l[i];
                imax2=i;
            }
        }
        while(l[imax2])
        {
            printf("%d %d\n",imax1,v[imax1][l[imax1]-1]);
            printf("%d %d\n",imax2,v[imax2][l[imax2]-1]);
            l[imax1]--;
            l[imax2]--;
            elevi+=2;
        }
    }
    if(elevi<n)
    {
        for(int i=1;i<=jmax;i++)
        {
            if(l[i]) printf("%d %d\n",i,v[i][l[i]-1]);
        }
    }
    return 0;
}