[NOIP模拟33]反思+题解

又考了一次降智题……

拿到T1秒出正解(可能是因为我高考数学数列学的海星?),分解质因数以后用等比数列求和计算每个因子的贡献。但是当时太过兴奋把最后的ans×=打成了ans+=,还过掉了sb样例。觉得自己AC稳了就先交了。

然后去看T3。没什么思路就先打了个暴力,以为最后一个看似不可做的点是给特判分的就打了一堆特判(没想到真的是用来防AK的)。

最后搞T2,实在是搞不懂题就打了个乱搞,样例也可过就扔掉了。

最后对拍T1的时候发现答案完全不对,因为只剩30min辽所以我当场慌的一批,压根就没想改之前的代码,xjb打了一个70分的暴力赶在考试结束前调了出来。

考后4minA掉T1。一个字符的差距。

如果在最后发现自己之前的代码有错误,一定要先想能不能改过来再考虑打暴力止损。一开始心态平稳时想的思路大概率是正确的,如果对拍出错很有可能是细节问题。

A.春思

水题。对A分解质因数,把因子的次数都乘上B就得到了原数。之后考虑因数和d(x)的积性函数性质。对于每一个质因子次幂,它的约数和相当与一个等比数列和,那么把每一个质因子次幂的约数和乘起来就得到了最终结果。(别告诉我您不知道等比数列求和公式)

 B.密州盛宴

显然,如果想符合要求就必须保证每个人随时都在吃,那么自然0越靠前越优,而且0的个数不能超过n个。

考虑比较直观地确定方案是否合法的方式。把0的值赋成-1,从序列末尾往前扫,维护后缀和。一旦某时刻后缀和<1,就可以确定方案是不合法的。

所以可以从末尾挑C个0挪到开头,二分C即可。这是70分的做法。

 可以发现,如果从已经扫到的0里挑一个扔到前面去,目前的后缀和就会+1。所以答案转化为求整个序列后缀和的最小值后取绝对值再-1。

对于每一个给出的循环节,计算这一段的后缀和,并记录过程中后缀和的最小值。对于一整段的后缀和是否>0分类讨论一下更新答案即可。

 C.赤壁情

又是一道神dp……

如果我们能把每一个赤壁之意对应的方案数都求出来,那么就能统计一下再除个阶乘得到答案了。所以把这题转化成计数dp。

我们把形成排列的过程看作把1,2,...n放到n个位置的过程。为了能够转移,应该把这n个数从小到大逐个放入。

定义状态数组f[i][j][k][l]i表示从小到大放到了i,j表示目前的序列上有j段数(它们被一些空位隔开),k表示边界(最左和最右端)放了几个数(0 or 1 or 2),l表示目前赤壁之意为l。

考虑插入第i个数对总赤壁之意的贡献:

 

 具体转移还是很繁琐的,有13个转移方程(可以合并成5个)。我们以其中的一个为例:

f[now][j][0][l]+=f[pre][j][0][l]j2;

它的含义是:插入一个数,并且这个数位于一段的左右端点(恰好延长了一段,没有单独成段或连接左右两段),那么它的方案可以是之前基础上从j段里选一个放,并且每一个都可以选左右两端。且对目前的赤壁之意没有影响。

以此类推转移即可。第一维要滚动,因为要枚举段数所以提前算一下范围,还有就是一开始赤壁之意可能为负所以集体加上一个base防止下标溢出。

至于最后一个防AK点……__float128水过好了QAQ。

 

本文作者:Rorschach_XR

本文链接:https://www.cnblogs.com/Rorschach-XR/p/11437246.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Rorschach_XR  阅读(222)  评论(0编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起