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也可以。

原文地址:https://www.cnblogs.com/philchieh/p/7128116.html