[整理]正睿划水记
人工智能与信息学研讨会
Day 1
C
首先有贪心策略:如果钦定一个数在最长上升子序列中,那么它后面的数肯定是比它小的放左边大的放右边,也就是一段下降一段上升。
然后就分别统计前后缀即可。
D
预处理出多边形能覆盖到的整点,然后通过巧妙的状压来判断是否覆盖到关键点。
Day 2
C
可以直接在一个序列中二分,再去另一个里二分对应的位置,但这样会多一个 \(\log\),考虑如何去掉它。
事实上,我们只需要在一个序列中二分就可以确定另一段的长度并判断是否合法了,所以就通过了此题。
D
AC 自动机上数位 dp 裸题。
Day 3
B
先考虑一条链上的情况,发现就是交换前缀和也就是逆序对数。
然后发现即使上了环也不会改变模所有数的和的情况,然后按照余数划分。
C
求多个字符串中所有子串出现次数的平方和,屑板子。
D
歌唱王国严格弱化版,不放。
Day 4
A
发现一对不在同一排的数一定会造成贡献,而在同一排但不相邻的数可以通过移动中间所有数或移动这两个数来完成。
C
直接 dp,加点剪枝可以跑得飞快。
D
可以建模成一个图,每个点向相差一位的点连边,最终就是要找距离最大的点。
E
和它的弱化版中国象棋一样,对于每行记录多少列放了 \(0,1,2\) 个然后暴力转移即可。
Day 5
B
无脑 BFS 实测可过。
C
看到题面这熟悉的限制和熟悉的模数,可以意识到是容斥 dp 套上 CRT,然后就做完了。
Day 6
C
先考虑简化版的二元组,因为容易发现三元组可以转化为二元组。
易知按照 \(a_i-b_i\) 排序后选 \(a_i\) 的一定是前面一段,所以对于原问题只需要维护每个前缀选 \(A\) 个的最大值即可。
D
正解是可持久化平衡树,但是可以线段树暴力分裂儿子。
Day 7
A
正解似乎是直接递推,不过总感觉暴力 \(\mathcal O\left(\dfrac{n^3}w\right)\) 能卡过考场上并没有卡过。
B
这道题的转化非常巧妙,可以把盒子看作点,球看作待定向的无向边,容易猜出一个包含奇数条边的连通块一定会有至少一个奇度点,那么我们统计这个就行了。
C
我们可以从前往后递推,每时每刻最小面额的用量都是可求出的,直接记搜可以跑过去。
D
每个位置都有一个能填的范围限制,然后我们发现两个填好的数之间的顺序是不用管的,也就是一个二分图匹配问题,但实现时需要一些技巧。
Day 8
C
大力分类讨论前三名有几个点没有出度。
D
我们只需要枚举一倍直径到两倍直径之间的长度然后 dp 算出方案数即可,可以利用容斥优化。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步