zoukankan      html  css  js  c++  java
  • 2017.07.06【NOIP提高组】模拟赛B组

    Summary

      今天比赛感觉题目很奇葩,都可以用许多简单方法来做,正确性都显然,当然也有点水,也就是说是考我们的数感和数学知识,而程序,只是代码的体现。

      这次的时间安排感觉不错,因为很快就打完最后一道题了,后面的时间都在思考前面两道题

    Problem

    T1 护花

    题目大意

      牛都跑出去了,FJ想要把他们抓回来。抓每只牛需要2*Ti分钟的时间,每只牛在没有被要抓回去时,每分钟吃Di棵花,问怎么样抓牛才能使被吃掉的花尽量少。

    想法

      本来我是想设一个动态规划,F[i,j]表示第i头牛,是第j只被抓的,然后用堆等数据结构来维护。

      但是,有后效性,而且不确保在此之前,是否有出现过的j。

      比赛时只好打了一个递归。

      但是,就在草稿本上,惊奇的发现了个东西:

      例如:

        第一头牛 Ti:a  Di:b

        第二头牛 Ti:c  Di:d

      如果设先选第一头牛更优,那么有如下不等式

        2cb<2ad

        b/a<d/c.........通过某些转化得到

      也就是说,两只的情况下要满足这个条件。由特殊到一般,再试3,4的可以发现,其实就是求Di/Ti的序列(排序的),然后模拟一次就行了

      这道题有很好的草稿本技巧!

    T2 最高的奶牛

    题目大意

      FJ有N(1 <= N <= 10,000)头奶牛,编号为1到N,站成一条直线。每头奶牛自己的身高(正整数,秘密未知),告诉你最高奶牛的身高H及位置I,同时告诉你R(0 <= R <= 10,000)组信息,每组信息由两个数ai,bi组成,表示奶牛ai可以看到奶牛bi,这就意味着奶牛bi的身高至少和奶牛ai的身高一样高,同时奶牛ai到奶牛bi之间的奶牛身高必须低于奶牛ai
      现在要你求出每头奶牛最高可能的高度,保证有解。

    想法

      这道题不知道为什么可以这么做,感觉很神奇。

      设a,b是可以互相看到的两头牛,然后只要a,b在之前没有出现过,就把a+1~b-1内的数减一就行了,初始值为最高的奶牛高度。

    T3 最高的奶牛

    题目大意

      给出一段数,求这段数最大值减最小值是多少。

    想法

      线段树来维护区间最大值最小值就可以了。当然RMQ也可以。

  • 相关阅读:
    HDU 1525
    kmp模板
    hdu 4616 Game(树形DP)
    hdu 4619 Warm up 2(并查集活用)
    hdu 4614 Vases and Flowers(线段树加二分查找)
    Codeforces 400D Dima and Bacteria(并查集最短路)
    poj 2823 Sliding Window (单调队列)
    hdu 2196 Computer(树形dp)
    hdu 4604 Deque
    最短路径
  • 原文地址:https://www.cnblogs.com/philchieh/p/7128116.html
Copyright © 2011-2022 走看看