The Enchanted Forest 题解
题目大意
t组数据,每组数据给出长为n的数组,每个元素ai代表一个点,元素大小代表此位置上的蘑菇数量,0时刻可以选择任意初始位置(此时不收集此点上的蘑菇),此新每一分钟下列事件顺序发生:
1.向左或向右移动一个位置(也可以不动)
2.收集当前点上的所有蘑菇
3.每个点上出现一个新蘑菇
要求程序求出k分钟新能够收集的最大磨菇数
数据范围:(1≤t≤1e4) (1≤n≤2e5, 1≤k≤1e9) (1≤ai≤1e9)
例如:
1 | intput |
题解
此题codeforces难度为1600,代码虽然简单,但是思维量较大,容易将问题想复杂,需要在心里模拟过程发现规律并分解问题,这份题解只用于记录简要思路和过程,只能提供“想法是什么”,不能提供“怎么能产生这样的想法”以及“为什么这样想是正确的”。建议先独立想出思路再看题解,否则没有锻炼思维能力的效果
把新增加的蘑菇和初始的蘑菇分为两部分来看会更清楚一些,初始的好说,需要想一想怎么才能收集最多新出现的蘑菇
需要分类讨论:
k小于n时,找到初始最大区间并求和,加上在这个区间内能收集的最多新出现的磨菇数(最多数量可以证明为等差数列求和,项数为(k-1),首项为1,末项为(k-1)),随后两部分相加即为答案
k≥n时,必定能收集全部初始蘑菇,这里新出现的蘑菇的收集思考方式比较独特,剩余时间为(k-n)以前新出现的蘑菇要么等效于要么就是能够全部收集,之后设当前时间为,单独考虑每次所有点蘑菇加一,这些蘑菇要么等效于要么就是最多只能采i个,剩下(n-i)个,以此类推总共剩下的磨菇数就是,进而采集到的新出现的最大数量为,两部分相加即可
使用前缀和快速求出区间和,数据量较大,记得开long long
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog of Guo12181!