排序 POJ 1828

题目:

题目链接

给出N个二维点,要求所有不受控制点的个数,对于<x0,y0> , 如果存在点<x,y> 使得 x>=x0&& y>=y0,这就称为<x0,y0>受控于<x,y>。

  • N<5*104;
  • multi_case

解法:

这个题目还算不错,,只允许Nlog(N)的排序预处理和N的遍历。,,求解的时候,最开始想到的是二分,,结果超时。。看样子case还是挺强的~~

  • 先将所有点按照 x_y进行排序。就是先按 x 递增, x相同的再按 y 递增。
  • 去除所有 x 坐标相同的点,只剩下其中 y 值最大的那个点。
  • 然后从右往左遍历,最右边的点肯定不受控,ans++,maxy等于最右边的点的y坐标。考虑第i 个点,如果它的y 大于maxy ,则ans++,并更新maxy,否则继续往前考虑。(自己在稿纸上随便画几个点就很清楚了~~~)

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;

struct Node{
  int x;
  int y;
}nodes[5*10000+5];

bool cmp_x_y(const Node &n1, const Node &n2){
     if(n1.x<n2.x) return true;
     else if(n1.x == n2.x && n1.y<n2.y) return true;
     return false;
}

int main()
{
    int N;
    while(1)
    {
        scanf("%d",&N);
        if(!N) break;
        for(int i = 0; i<N; i++){
              scanf("%d%d",&nodes[i].x,&nodes[i].y);
        }
        sort(nodes,nodes+N,cmp_x_y);
        int k = 0;
        for(int i=0; i<N; i++)
        {
            if(i<N-1 && nodes[i].x == nodes[i+1].x)
                 continue;
            else nodes[k++] = nodes[i];
        }
        int ans = 1;
        int maxy = nodes[k-1].y;
        for(int i = k-2; i>=0; i--){
            if(nodes[i].y>maxy){
                ans++;
                maxy = nodes[i].y;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-06 20:21:30

排序 POJ 1828的相关文章

拓扑排序 POJ 2367

今天网易的笔试,妹的,算法题没能A掉,虽然按照思路写了出来,但是尼玛好歹给个测试用例的格式呀,吐槽一下网易的笔试出的太烂了. 就一道算法题,比较石子重量,个人以为解法应该是拓扑排序. 就去POJ找了道拓扑排序的题:POJ2367 直接上代码吧: #include<stdio.h> #include<string> #define clr(x) memset(x,0,sizeof(x)) int g[101][102]; int indegree[102]; int res[102]

图论之拓扑排序 poj 2367 Genealogical tree

题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstring> #include<queue> #include<vector> #include<algorithm> using namespace std; const int maxn=200; int ans; int n; int in[maxn]; //记录入度

拓扑排序 POJ 1049 Sorting It All Out

题目传送门 1 /* 2 拓扑排序裸题:有三种情况: 3 1. 输入时发现与之前的矛盾,Inconsistency 4 2. 拓扑排序后,没有n个点(先判断cnt,即使一些点没有边连通,也应该是n,此时错误是有环): 5 flag = -1 表示不确定:return 2 表示拓扑序唯一 6 3. 其他情况都是 Sorted sequence cannot be determined. 7 8 */ 9 #include <cstdio> 10 #include <algorithm>

A:点排序-poj

A:点排序 总时间限制:  1000ms 内存限制:  65536kB 描述 给定一个点的坐标(x, y),在输入的n个点中,依次计算这些点到指定点的距离,并按照距离进行从小到大排序,并且输出点的坐标(如果距离相同,将x轴坐标比较小的点排到前面, 如果距离相等且x轴坐标也相同,则将y轴坐标较小的点排到前面).坐标为int类型,范围为-1000到1000.n 为1到100之间正整数. 输入 3行,第一行为指定点的坐标x, y.x, y之间用空格隔开.第二行为一个整数n.第三行为n个点的坐标,彼此之

简单几何(极角排序) POJ 2007 Scrambled Polygon

题目传送门 题意:裸的对原点的极角排序,凸包貌似不行. /************************************************ * Author :Running_Time * Created Time :2015/11/3 星期二 14:46:47 * File Name :POJ_2007.cpp ************************************************/ #include <cstdio> #include <al

POJ题目分类推荐 (很好很有层次感)

著名题单,最初来源不详.直接来源:http://blog.csdn.net/a1dark/article/details/11714009 OJ上的一些水题(可用来练手和增加自信) (POJ 3299,POJ 2159,POJ 2739,POJ 1083,POJ 2262,POJ 1503,POJ 3006,POJ 2255,POJ 3094) 初期: 一.基本算法: 枚举. (POJ 1753,POJ 2965) 贪心(POJ 1328,POJ 2109,POJ 2586) 递归和分治法. 递

图论常用算法之一 POJ图论题集【转载】

POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:http://poj.org/ 1062* 昂贵的聘礼 枚举等级限制+dijkstra 1087* A Plug for UNIX 2分匹配 1094 Sorting It All Out floyd 或 拓扑 1112* Team Them Up! 2分图染色+DP 1125 Stockbroker

POJ 刷题指南

OJ上的一些水题(可用来练手和增加自信) (POJ 3299,POJ 2159,POJ 2739,POJ 1083,POJ 2262,POJ 1503,POJ 3006,POJ 2255,POJ 3094) 初期: 一.基本算法: 枚举. (POJ 1753,POJ 2965) 贪心(POJ 1328,POJ 2109,POJ 2586) 递归和分治法. 递推. 构造法.(POJ 3295) 模拟法.(POJ 1068,POJ 2632,POJ 1573,POJ 2993,POJ 2996) 二

整理——各种模板

便于考前用... 平时先囤着... hash                                                  ACM1996总决赛-10-20-30 extend euclid                                      poj 1061-青蛙的约会 拓扑排序                                              poj 1270-Following Orders dsu