Processing math: 100%

NOIP2021 游记

Day -21 ~ -1

停课了,好开心o( ̄▽ ̄)ブ

中间没有什么好说的,无聊的集训。

Day 0

跟同学颓废了几乎一天,意外地发现备考室电脑有 PVZ2,玩了一会。

下载了 MC 玩玩,然后专注于物理画线(

希望不要炸。

Day 1

吃过早餐就到考场了,密码忘了。

先看 T1,发现最大的数 107 的后一位也才 107+1,所以想到了一个暴力的做法:把所有不符合条件的数筛出来,然后预处理下一个数是多少。

测了一下极限数据,感觉可以过,就没管了。

T2 没有任何思路,是我不会做的题,于是打了 50 分暴力滚了。

T3 更不会了,连差分的关键性质都没观察到,打了 12 分就滚了。

T4 感觉很可做,有大量部分分,于是开始莽。码了个类似 bfs 的东西,期望 44 分,但是第三个大样例没过,不会打暴力的我只能眼调。

后来的三个小时,我就一直对 T4 眼调,试小样例,重构了 3 次,到最后都没能调出来……

没什么好说的,这种垃圾游记还好意思写出来。

Day ???

果不其然,T4 炸了,100+50+12+0=162。

在同学们一个晚上的帮助下,发现了 T4 爆零的问题:数组没有初始化。

啊啊啊啊啊什么出题人会出这种 n×m 的题目啊。

不过我还是不知道为什么大样例没过。

压线一等。ZLT 194,ZTC 187,WCJ 168,都是大佬。

膜拜学长 LH 344 全省第一!!!

退役了。

Bonus

既然打的太烂了,我来补充一下中间两题的解法吧。

T2 在考试当天晚上就想出来了,也许我应该肝 T2。

考虑到 n 不大,就算 a1==an=m,也只会对前 5 位产生影响。

0m 的顺序决定要选多少个进到 a。设 fi,j,k,l 表示现在 a 里面有 i 个数,已经选完了 0j 的数,对二进制 j 位后 5 位的影响为 k,目前 1 的个数为 l 的答案。

直接枚举转移即可,复杂度 O(n3m25)

T3 令 da 的差分数组,一次操作就相当于交换相邻两个 di。所以题目要求重排 d,使得方差最小。

化简一下方差的式子,得到 S2=nni=1a2i(ni=1ai)2

通过打表发现,最终答案的 d 数组一定先递减后递增(证明有点麻烦),所以将 d 数组从小到大排序,每次可以将 di 往两边放,暴力做的时间复杂度为 O(2n)

dp 优化求解过程,可以记录 ni=1a2ini=1ai 来最小/大化另一个式子。因为 ni=1ai 会小一点,记录的空间会更小,所以选择这个。

fi,j 表示考虑到 di,目前 ni=1ai=jni=1a2i 的最小值,转移方程推一推就出来了,时间复杂度 O(n2maxai),无法通过最后一个 sub。

发现题目中的 ai 很小并且递增,所以有很多 di 的值为 0。事实上,di=0 时的转移是无用的,所以可以直接忽略,复杂度变为 O(naimin(n,ai)),可以通过。

范围很奇怪,建议用滚动数组。一些奇怪的随机化做法也可以过。

本文作者:AFewSuns

本文链接:https://www.cnblogs.com/AFewSuns/p/noip2021.html

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

posted @   AFewSuns  阅读(184)  评论(7编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· 深度对比:PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起