zoukankan      html  css  js  c++  java
  • COJN 0485 800503寻找平面上的极大点

    800503寻找平面上的极大点
    难度级别:C; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
    试题描述
    在一个平面上,如果有两个点(x,y),(a,b),如果说(x,y)支配了(a,b),这是指x>=a,y>=b;
    用图形来看就是(a,b)坐落在以(x,y)为右上角的一个无限的区域内。
    给定n个点的集合,一定存在若干个点,它们不会被集合中的任何一点所支配,这些点叫做极大值点。
    编程找出所有的极大点,按照x坐标由小到大,输出极大点的坐标。
    本题规定:n不超过100,并且不考虑点的坐标为负数的情况。
    输入
    输入包括两行,第一行是正整数n,表示是点数,第二行包含n个点的坐标,坐标值都是整数,坐标范围从0到100,输入数据中不存在坐标相同的点。
    输出
    按x轴坐标最小到大的顺序输出所有极大点。
    输出格式为:(x1,y1),(x2,y2),...(xk,yk)
    注意:输出的每个点之间有","分隔,最后一个点之后没有",",少输出和多输出都会被判错
    输入示例

    1 2 2 2 3 1 2 3 1 4
    输出示例
    (1,4),(2,3),(3,1)
    其他说明
     
     

    题解:奇妙的题。。。窝萌按x,y做一遍全排序,从最右上的点开始扫描y就行,充分利用好单调性就行。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstring>
     7 #define PAU putchar(' ')
     8 #define ENT putchar('
    ')
     9 using namespace std;
    10 const int maxn=100+10,inf=-1u>>1;
    11 struct P{int x,y;bool operator<(const P&b)const{return x<b.x||(x==b.x&&y<b.y);}}p[maxn];
    12 inline int read(){
    13     int x=0,sig=1;char ch=getchar();
    14     for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=0;
    15     for(;isdigit(ch);ch=getchar())x=10*x+ch-'0';
    16     return sig?x:-x;
    17 }
    18 inline void write(int x){
    19     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
    20     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
    21     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
    22 }
    23 int n;
    24 void init(){
    25     n=read();
    26     for(int i=0;i<n;i++){
    27         p[i].x=read();p[i].y=read();
    28     }
    29     return;
    30 }
    31 int cnt=0,ans[maxn];
    32 void work(){
    33     sort(p,p+n);int mx=-inf;
    34     for(int i=n-1;i>=0;i--){
    35         if(p[i].y>mx)mx=p[i].y,ans[cnt++]=i;
    36     }
    37     printf("(%d,%d)",p[ans[cnt-1]].x,p[ans[cnt-1]].y);
    38     for(int i=cnt-2;i>=0;i--){
    39         printf(",(%d,%d)",p[ans[i]].x,p[ans[i]].y);
    40     }
    41     return;
    42 }
    43 void print(){
    44     return;
    45 }
    46 int main(){init();work();print();return 0;}
  • 相关阅读:
    chrome浏览器实现上传下载功能
    Python安装第三方库时报错的解决办法
    python文本编辑器Visual Studio Code
    python下载安装
    selenium环境配置
    linux_安装浏览器
    在linux中安装selenium+chrome
    armbian_配置selenium
    armbian_运行puppeteer
    java环境配置
  • 原文地址:https://www.cnblogs.com/chxer/p/4675429.html
Copyright © 2011-2022 走看看