• AtCoder Regular Contest 092 C


    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.


    Sample Input 1

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

    Sample Output 1

    Copy
    2
    

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


    Sample Input 2

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

    Sample Output 2

    Copy
    2
    

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


    Sample Input 3

    Copy
    2
    2 2
    3 3
    0 0
    1 1
    

    Sample Output 3

    Copy
    0
    

    It is possible that no pair can be formed.


    Sample Input 4

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

    Sample Output 4

    Copy
    5
    

    Sample Input 5

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

    Sample Output 5

    Copy
    4
    题意
    给你n个二维坐标点A,再给n个二维坐标点B,如果B的x和y均大于A,这两个点可以匹配,求A的最大匹配
    题解
    一道二分图匹配的题,算是比较基础的题
    当然这个题可以用贪心从小的开始,每次都选择B里与其最相近的元素
    代码
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int N=310;
     5 pair<int,int> p[N];
     6 int vis[N],match[N];
     7 int n;
     8 int Find(int u)
     9 {
    10     for(int i=n+1;i<=n+n;i++)
    11     {
    12         if(p[i].first>p[u].first&&p[i].second>p[u].second&&!vis[i])
    13         {
    14             vis[i]=1;
    15             if(!match[i]||Find(match[i]))
    16             {
    17                 match[i]=u;
    18                 return 1;
    19             }
    20         }
    21     }
    22     return 0;
    23 }
    24 int main()
    25 {
    26     cin>>n;
    27     for(int i=1;i<=n+n;i++)
    28         cin>>p[i].first>>p[i].second;
    29     int ans=0;
    30     for(int i=1;i<=n;i++)
    31     {
    32         memset(vis,0,sizeof(vis));
    33         if(Find(i))
    34             ans++;
    35     }
    36     cout<<ans;
    37     return 0;
    38 }
  • 相关阅读:
    JUC高并发编程(三)之模拟接口压力测试
    JUC高并发编程(二)之多线程下载支付宝对账文件
    JUC高并发编程(一)之请求合并案例
    《Head First设计模式》读书笔记
    图文详解23种设计模式
    Laravel路由匹配
    深夜debug:一个不常遇到的HbuilderX自动化测试运行问题
    高德地图API中折线polyline不能跨越180度经度线的解决方案
    sublime配置java运行环境
    Docker技术入门
  • 原文地址:https://www.cnblogs.com/taozi1115402474/p/8724413.html
Copyright © 2020-2023  润新知