Pagini recente » Cod sursa (job #2575516) | Cod sursa (job #1657164) | Cod sursa (job #1171462) | Cod sursa (job #1408656) | Cod sursa (job #1836626)
#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;
}