「题解」NOIP模拟测试题解乱写II(36)

毕竟考得太频繁了于是不可能每次考试都写题解。(我解释个什么劲啊又没有人看)

甚至有的题目都没有改掉。跑过来写题解一方面是总结,另一方面也是放松了。

NOIP模拟测试36


T1字符

这题我完全懵逼了。就是来教我们打暴力和高级一点的复杂度分析的??

然而暴力拿走,复杂度分析并没有get到。调和级数是啥??

度娘:

调和级数(英语:Harmonic series)是一个发散的无穷级数。调和级数是由调和数列各元素相加所得的和。中世纪后期的数学家Oresme证明了所有调和级数都是发散于无穷的。但是调和级数的拉马努金和存在,且为欧拉常数。……

级数是啥??拉马努金和是啥??一脸懵逼。

不过暴力打法给我上了一课。倒不是这道题的暴力打法有多么高明,只是告诉我不要钻进死胡同。

我一开始想的是枚举循环节的长度$len$,然后根据前$len$个数字中已填的位置确定一个循环节,根据$m$个已知位置check。

然后发现这样不可做。因为我还需要枚举一下上下界,还要调和一下$len$范围内的各个数字的个数。于是非常难过。

然后一直想一直想一直想。。。。

后来Larry告诉我直接用$m$个已知位置和枚举的$len$确定循环节就好……然后贪心……

值得一提的是一个柿子,赛时曾经让我很难受:$(i-1)%len+1$直接mod的话$len$的整数倍的位置就会出现$bug$。

于是$-1$,$mod$后$+1$。完美解决。

T2蛋糕

模板区间dp??然而很久没打区间dp再加上以前太水。。。

T3游戏

我没读懂题意……一直以为所有莉露露一起动。后来发现最优情况下肯定不能所有莉露露一起动啊……

考虑莉露露的四种操作:拿起由岐,放下由岐,扔出由岐,抱着由岐飞。

发现拿起和放下都没用,充其量就是换一个莉露露来接他。

考虑由岐的状态:一种是被扔出的状态,一种是被莉露露抱着飞的状态。

而由于被扔的状态中不能拐弯,于是被扔出去的状态又分为两种:横着飞和竖着飞。

所以考虑拆点。把每个点拆成三个:横着飞的状态,竖着飞的状态,被莉露露抱着的状态。

考虑如何建边:

对于每一个点:状态1为被莉露露抱着,设状态2为横着飞,状态3为竖着飞。

对于状态1:可以由莉露露抱着向上向下向左向右飞,权值都是C。

也可以选择原地抛出让由岐进入“飞行”状态(滑稽),B可以在这里结算。于是权值为B。

对于状态2:可以继续向左飞,也可以继续向右飞,也可以选择在这个点降落。

继续飞的权值都是A,而降落需要考虑这个点有没有莉露露。无论有没有我们都可以视为召唤一个最近的莉露露过来接她。

于是考虑预处理每一个点最近的莉露露过来所需要的花费。

考虑多源点bfs预处理。然而有同学说了:莉露露会动啊。

的确会动,但是我们通过仔细考虑发现,假如莉露露1号通过某种交易将由岐交给了莉露露2号,再由莉露露2号交给莉露露1号,这样肯定是不优的。

所以每一个莉露露只会接由岐一次。这样下来预处理最近的莉露露赶过来需要的权值就正确了。

状态3同上。

建边后跑一边无脑堆优化dijkstra就行了。

完结撒花。

猜你喜欢

转载自www.cnblogs.com/xingmi-weiyouni/p/11468381.html