2D Plane 2N Points

AtCoder - 3942

Problem Statement

On a two-dimensional plane, there are N red points and N blue points. The coordinates of the i-th red point are (ai,bi), and the coordinates of the i-th blue point are (ci,di).

A red point and a blue point can form a friendly pair when, the x-coordinate of the red point is smaller than that of the blue point, and the y-coordinate of the red point is also smaller than that of the blue point.

At most how many friendly pairs can you form? Note that a point cannot belong to multiple pairs.

Constraints

All input values are integers.
1≤N≤100
0≤ai,bi,ci,di<2N
a1,a2,…,aN,c1,c2,…,cN are all different.
b1,b2,…,bN,d1,d2,…,dN are all different.

Input

Input is given from Standard Input in the following format:

N
a1 b1
a2 b2
:
aN bN
c1 d1
c2 d2
:
cN dN

Output

Print the maximum number of friendly pairs.

3
2 0
3 1
1 3
4 2
0 4
5 5

Sample Output 1

2
For example, you can pair (2,0) and (4,2), then (3,1) and (5,5).

3
0 0
1 1
5 2
2 3
3 4
4 5

Sample Output 2

2
For example, you can pair (0,0) and (2,3), then (1,1) and (3,4).

2
2 2
3 3
0 0
1 1

Sample Output 3

0
It is possible that no pair can be formed.

5
0 0
7 3
2 2
4 8
1 6
8 5
6 9
5 4
9 1
3 7

5

5
0 0
1 1
5 5
6 6
7 7
2 2
3 3
4 4
8 8
9 9

4

【解析】

int PD(int x)
{
for(int j=1;j<=n;j++)
{
if(line[x][j]&&!f[j])
{
f[j]=1;
if(o_t[j]==0||PD(o_t[j]))
{
o_t[j]=x;
return 1;
}
}
}
return 0;
}

AC代码：

#include<cstdio>
#include<cstring>
#define N 105
using namespace std;
int n,o_t[N];
int ans;
bool line[N][N],f[N];
struct node
{
int x;int y;
}red[N];

struct node blue[N];

{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d %d",&red[i].x,&red[i].y);
for(int i=1;i<=n;i++)
scanf("%d %d",&blue[i].x,&blue[i].y);
}
int PD(int x)
{
for(int j=1;j<=n;j++)
{
if(line[x][j]&&!f[j])
{
f[j]=1;
if(o_t[j]==0||PD(o_t[j]))
{
o_t[j]=x;
return 1;
}
}
}
return 0;
}
int main()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(red[i].x<blue[j].x&&red[i].y<blue[j].y)
line[i][j]=1;
}
for(int i=1;i<=n;i++)
{
memset(f,0,sizeof f);
if(PD(i)) ans++;
}
printf("%d",ans);
} 

• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他

120