Cod sursa(job #467161)
#include <stdio.h>
#include <algorithm>
using namespace std;
int n, i, j, k;
int Min = 10000000, puncte;
int X, Y, nr;
struct punct
{
int x;
int y;
} ;
struct punct NE[100001], SV[100001];
int cmp_x (punct nr1, punct nr2)
{
if (nr1.x != nr2.x)
return nr1.x < nr2.x;
else
return nr1.y < nr2.y;
}
int cmp_y (punct nr1, punct nr2)
{
if (nr1.y != nr2.y)
return nr1.y > nr2.y;
else
return nr1.x > nr2.x;
}
int main ()
{
FILE *f = fopen ("cadrane.in","r");
FILE *g = fopen ("cadrane.out","w");
fscanf (f,"%d",&n);
for (i=1; i<=n; ++i)
{
fscanf (f,"%d %d", &NE[i].x, &NE[i].y);
SV[i].x = NE[i].x;
SV[i].y = NE[i].y;
}
sort (NE + 1, NE + n + 1, cmp_x);
/*for (i=1; i<=n; ++i)
printf ("%d %d\n", NE[i].x, NE[i].y);
printf ("\n___________\n");
sort (SV + 1, SV + 1 + n, cmp_y);*/
/* for (i=1; i<=n; ++i)
printf ("%d %d\n", SV[i].x, SV[i].y);*/
for (i=1; i<=n; ++i)
{
for (k=1; k<=n; ++k)
{
puncte = 0;
X = NE[i].x;
Y = NE[k].y;
for (j=1; j<=n; ++j)
if (i != j)
if ( (NE[j].x <= X && NE[j].y <= Y) )
{
puncte ++;
//printf ("%d %d\n", NE[j].x, NE[j].y);
}
for (j=1; j<=n; ++j)
if (SV[j].x != X || SV[j].y != Y)
//if (SV[j].x >= X&& SV[j].y >= Y)
{
puncte ++;
//printf ("%d %d\n", SV[j].x, SV[j].y);
}
//printf ("pt pct %d %d avem %d puncte\n\n", NE[i].x, NE[i].y, puncte);
if (puncte)
Min = min (Min, puncte);
}
}
//printf ("Min = %d\n", Min);
fprintf (g,"%d", Min);
return 0;
}