【题解】CCPC Wannafly Camp Day7

A、 序列

每组i,j对答案的贡献可以分开考虑。
对于给定的i,j,对于所有在s[i], s[j]之间的数字k,答案的贡献是2^(n-j+i-1)。
那么我们可以从小到大枚举数字k,每次k上升1的时候都有一些位置对被激活,一些位置对被关闭,这
些位置对共享一个公共点,用线段树维护delta即可。

B、 四边形不等式

注意到一个集合其实就是若干个区间。 把这些区间的函数值加起来当做集合的函数值就行了。

C、 10^5万

这个题有很多种构造方法。可以按照k模3的余数分情况构造,也有比较漂亮的统一构造方法(考虑数字
连续的一些牌,每种有3张,除了第二小的有4张。如1112222333444555。)

D、 方阵的行列式

用Sherman-Morrison formula维护矩阵的逆。矩阵的行列式关于矩阵的一个元素x=A(i,j)是一次函数。
这个系数就是除去第i行和第j列的子矩阵的行列式(或者它乘以-1),其实也就是A的逆的第i列第j行元
素乘以A的行列式。

E、 上升下降子序列

就是不含2143也不含3412的排列数。答案可以找规律(递推式),也可以DP。DP [n] [k] 表示能分成
一个下降子序列和一个结尾大小不超过k的上升子序列的1到n的排列数。枚举1的位置和1左边不超过k
的数的个数来转移。

F、 草莓

先考虑n m都大于等于2。假设k至少是nm。考虑最后nm次采摘。至少要在农场里留下0+1+...+(nm-1)
个草莓。这样能算出采摘数量的上界。如果有哈密尔顿回路,那沿着回路绕圈就能达到这个上界。n和
m有一个是偶数就肯定有哈密尔顿回路。如果n和m都是奇数,发现找不到哈密尔顿回路。观察发现其
实可以一直等着,直到最后nm-1步再走一个哈密尔顿路径就行了。哈密尔顿路径的起点只要是横纵坐
标的和是偶数的格子都可以。由于现在假设k至少是nm,开始先用最多一步走到可能的哈密尔顿路径起
点,等到最后走这个哈密尔顿路径就行了。如果k小于nm,得到的草莓就是1+2+...+k(nm为偶数时走
哈密尔顿回路,nm为奇数时走除去某个角上的格子的哈密尔顿回路)。最后n和m有一个是1的情况。k
大的时候,走到角落里等到快结束再走唯一的哈密尔顿路径即可。k小的时候策略是先往某一个方向走
几步,然后一直向另一个方向走。

G、 草莓2

当 k <= nm 时,暴力搜索即可。
当 k > nm 时,答案一直在走哈密尔顿回路。

H、 游戏

注意到每组数字被删除的概率是相同的,于是我们只要统计一下有多少组互质的数字就可以了。

I、 圆

对于每个点,在它的最终位置顺时针旋转的过程中,移动的距离先是递增,然后递减。那么关键点有两
个,一个是它自己,一个是它对面的点,在这两个点上,顺时针移动对实际移动距离的影响的正负号会
变。我们只要把这2n个关键点拎出来,顺时针扫一遍,统计下正负号个数,计算答案即可。

J、 King

对于固定的i。j的取值范围为[a[i], a[i] + 1)。
对于固定的i,i + 1,j的取值范围为 (a[i+1]/(a[i]+1), (a[i+1]+1)/a[i])。
那么我们只要枚举i,二分最长胖序列的右端点,然后用个线段树维护一下最值,看看j是否可以存在就
可以了。

K、 修炼

每组通关组合独立考虑,最后取个最值就行。
对于某组组合,题目可以转换成找到最小的n,使得存在1...n的子集,使得元素和大于等于b1,并且补
集的元素和大于等于b2。
想到这一步,直接求n就行。

L、 图

由于 n <= 20,用01表示一个点是黑的还是白的,状态数至多只有 2^20 个,且每个点的后续状态是唯
一的,所以最后是一个环加外向树的形式。对于每组询问,我们先看看它能不能走到环里,再看在环里
走了几圈,最后落在哪里就可以了。

全部评论
K题的标程似乎较弱。。。 有的代码同时给能力值增加也过了,明显不合理。 hack数据 0 0 1 3 3 应该至少需要三天,部分代码只需要2天。。。
1 回复 分享
发布于 2020-02-07 11:50
E题题解疑似有误?根据这篇论文:https://www.combinatorics.org/ojs/index.php/eljc/article/view/v5i1r6 似乎应改为“不含2143也不含3412的排列数“。
点赞 回复 分享
发布于 2020-02-15 08:32

相关推荐

10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
8 1 评论
分享
牛客网
牛客企业服务