• 【USACO19Jan-S】山景Mountain View


    Description

      从农场里奶牛Bessie的牧草地向远端眺望,可以看到巍峨壮丽的山脉绵延在地平线上。山脉里由N座山峰(1≤N≤10^5)。如果我们把Bessie的视野想象成xy平面,那么每座山峰都是一个底边在x轴上的三角形。山峰的两腰均与底边成45度角,所以山峰的峰顶是一个直角。于是山峰i可以由它的峰顶坐标(xi,yi)精确描述。没有两座山峰有完全相同的峰顶坐标。 Bessie尝试数清所有的山峰,然而由于它们几乎是相同的颜色,所以如果一座山峰的峰顶在另一座山峰的三角形区域的边界上或是内部,她就无法看清。

      请求出Bessie能够看见的不同的山峰的峰顶的数量,也就是山峰的数量。

    Input

      输入的第一行包含N。
      以下N行每行包含xi(0≤xi≤109)和yi(1≤yi≤109),描述一座山峰的峰顶的坐标。

    Output

      输出Bessie能够分辨出的山峰的数量。

    Sample Input

    3
    4 6
    7 2
    2 5

    Sample Output

    2

    Hint

    【样例说明】在这个例子中,Bessie能够看见第一座和最后一座山峰。第二座山峰被第一座山峰掩盖了。


    思路

    • 将山峰转化为山底的左右端点,题目转化为求不被包含的线段数量

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int maxn=100005;
    int n,L,R,ans;
    struct fdfdfd{int left,right;}e[maxn];
    bool cmp(fdfdfd a,fdfdfd b){return a.left==b.left?a.right>b.right:a.left<b.left;}
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1,x,y;i<=n;++i) scanf("%d%d",&x,&y),e[i].left=x-y,e[i].right=x+y;
    	sort(e+1,e+n+1,cmp);
    	L=e[1].left; R=e[1].right; ans=1;
    	for(int i=2;i<=n;++i)
    	{
    		if(e[i].left>=L&&e[i].right<=R) continue;
    		++ans; L=e[i].left; R=e[i].right;
    	}
    	cout<<ans<<'
    ';
    	return 0;
    }
    
  • 相关阅读:
    es6中promise的实现及原理
    移动端
    javascript知识点复习
    html和css基本常识总结
    kafka,查看指定group下topic的堆积数量
    解决问题:Android设备运行自动化脚本报错 ioerror RPC server not started
    linux下安装python3
    使用vsftpd搭建FTP服务
    前端性能监控平台showslow+Yslow搭建
    学习笔记-- Python网络编程
  • 原文地址:https://www.cnblogs.com/wuwendongxi/p/14123682.html
Copyright © 2020-2023  润新知