zoukankan      html  css  js  c++  java
  • 【USACO 2019 January Silver】Mountain View题解

    题目:

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

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

    样例输入
    3
    4 6
    7 2
    2 5
    样例输出
    2

    提示
    在这个例子中,Bessie能够看见第一座和最后一座山峰。第二座山峰被第一座山峰掩盖了。

    思路:

    这可能类似以前的 一道题,那里我用的是STL模板,其实也能用堆做,但这都是优化,而这次这道题没法优化,可能数据太水,O(n^2)竟然过了。

    我的方法是先以高度排序(降序),然后依次遍历一遍,如果没被前面的山覆盖,那就ans++。

    可能有人会问,为什么要排序呢?我们可以想一想,高的山一定不可能被小的山覆盖,所以从高往低,可以算是一种优化吧?

    可能又有人会问,如何判断它是否被前面的山覆盖呢?很简单,遍历比它高的山且那座山没被覆盖,如果y1-abs(x-x1)>y,那么x,y这座山就被覆盖了。

  • 相关阅读:
    余额宝收益查询_最新收益率
    以数据结构为核心的编程方法
    CMake使用技巧
    使用Boost库(1)
    C++程序的目录结构、编译、打包、分发
    Header Only Library
    为什么要学习数据结构和算法?
    自己手动构建文件服务器
    今天笔试的几道题目分享-三页智力题+三页程序题
    【转】委托的N种写法,你喜欢哪种?
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13159900.html
Copyright © 2011-2022 走看看