题解 洛谷P2772 【寻找平面上的极大点】

这道题目很简单,我们可以用暴力枚举的方式来解决。

首先,我们要按照纵坐标的值从大到小排个序,可以使用Operator,也可以写一个Compare函数。

然后,我们记录前面所有横坐标的最大值LasX,往后扫,扫到比LasX还大的,就输出答案。

注意处理一下每个答案之间的逗号!

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct Struct
{
    int X;
    int Y;
    bool operator<(const Struct &Compare)const
    {
        if(Y==Compare.Y)
        {
            return X>Compare.X;
        }
        return Y>Compare.Y;
    }
};
Struct Array[500001];
int main(void)
{
    register int N;
    cin>>N;
    register int i;
    for(i=1;i<=N;i++)
    {
        cin>>Array[i].X>>Array[i].Y;
    }
    sort(Array+1,Array+N+1);
    register int LasX;
    LasX=-1;
    register bool Flag;
    Flag=true;
    for(i=1;i<=N;i++)
    {
        if(Array[i].X>LasX)
        {
            LasX=Array[i].X;
            if(Flag)
            {
                Flag=false;
            }
            else
            {
                putchar(',');
            }
            putchar('(');
            cout<<Array[i].X;
            putchar(',');
            cout<<Array[i].Y;
            putchar(')');
        }
    }
    return 0;
}
View Code

 

posted @ 2020-08-08 21:34  Bushuai_Tang  阅读(178)  评论(0编辑  收藏  举报