码迷,mamicode.com
首页 > 其他好文 > 详细

【四校联考】【比赛题解】FJ NOIP 四校联考 2017 Round 7

时间:2017-10-01 23:48:55      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:height   遇到   max   多少   logs   一个   速算   sqrt   round   

此次比赛为厦门一中出题。都是聚劳,不敢恭维。

莫名爆了个0,究其原因,竟然是快读炸了……很狗,很难受。

话不多说,来看看题:

【T1】

题意:

技术分享

样例:

技术分享

PS:1<=h[i]<=100000。

题解:

假设\(max\left(h_{i}\right)=M\),可以发现最大高度不超过\(M+n\)。

而用\(m\)块砖,向上最多能搭\(\sqrt{m}\)个。

故最大高度为\(M+min\left(n,\sqrt{m}\right)\)。

而最低高度为\(M\)(或\(M+1\))。

也就是说,高度的范围不超过3163。

而可以看出对于高度\(h\),能否搭建起高\(h\)的塔是单调的。

如果我们二分高度\(h\),计算能否搭建,就能够较快出解。

考虑在第\(i\)列搭上\(h\)的高度,那么最少需要多少砖块呢?

当然是按照金字塔形斜向下,直到遇到第一个可以作为支撑的砖块。

设\(left\left[i\right]\left[h\right]\)为坐标\(\left(i,h\right)\)向左斜向下遇到的第一个砖块的标号,\(right\left[i\right]\left[h\right]\)则为向右斜向下,若不存在,则值为0。

那么最少需要的砖块数(包括已经搭建的)等于:

\(Sum[i][h]=h(right[i][h]-left[i][h]-1)-\frac{(i-left[i][h])(i-left[i][h]-1)}{2}-\frac{(right[i][h]-i)(right[i][h]-i-1)}{2}\)。

而需要多搭的为:\(Sum[i][h]-(sum_{right[i][h]-1}-sum_{left[i][h]})\),其中\(sum\)为前缀和。

现在,如何快速算出\(left\)和\(right\)呢?

看往左斜向下的,容易发现,\(k\)能够阻挡\((i,h)\)当且仅当\(h_{k}-k\geqslant h-i\)。

而对于向右下方的,我们有,\(k\)能够阻挡\((i,h)\)当且仅当\(h_{k}+k\geqslant h+i\)。

【四校联考】【比赛题解】FJ NOIP 四校联考 2017 Round 7

标签:height   遇到   max   多少   logs   一个   速算   sqrt   round   

原文地址:http://www.cnblogs.com/PinkRabbit/p/7618236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!