2017年多校联训2 部分题解

来源:互联网 发布:牵丝戏mmd动作数据 编辑:程序博客网 时间:2024/06/14 05:29

1001. Is Derek lying?

两个人的分数差、分数和,分别满足一个不等式。

1003. Maximum Sequence

贪心,题解里讲得很好。

1004. Puzzle

见题解。

1006. Funny Function

碰到这种看起来像找规律的题,先打一个表。
给一个打表程序吧。。。

最后的规律当然比题解复杂一点。。。

1008. To my boyfriend

求期望相当于求和,求和可以单点贡献相加。

因为计算不同的数,也就是相同的数只贡献一次,约定一个子矩阵内如果有多个相同的数字则仅由最上并且最左的那个数字贡献。

对于某行某列的数,考虑它在子矩阵内能产生贡献的边界:

  • 对于下边界,没有特别的限制;
  • 对于上边界,不能到达该列相同的数;
  • 对于左右边界,与上边界有关,且易知上边界越向上,左右边界越靠近该列。

显然,对于上边界的限制,我们需要维护该列某数字上一次出现的行号。而对于左右边界,实际上也可以类似地获得。

记当前这个数为col,位于xy列。用j由远及近枚举每一列,将第j列上col上一次出现的那行的l更新为j,枚举每一列后,再根据上述左右边界的性质,从第x1行向上不断对lmax(越来越靠近第y列)。r也是类似地处理。最后再枚举子矩阵的上界,对于每个上界可以O(1)累加贡献。总的复杂度O(n3)

最后由于我们约定的是最上且最左,所以左边界要考虑到同一行,右边界不用考虑同一行,这一点在读入前清空数组就会自动满足。

1009. TrickGCD

栗子原话:

现在感觉数列的值域化考的很多啊
数列的值域化,还有n/1+n/2+…+n/n=nlogn
这两个东西放在一起很热门

根据题目,其实我们只要保证 1~n 总的gcd满足条件即可。

首先,我们从2开始枚举x,表示总的gcd至少为x,然后就需要容斥,大概感觉一下容斥系数就是 μ(x)(不会证),所以最终答案 ans=min{ai}x=2μ(x)i=ni=1aix

这时候有两个想法。。。

一是确定的 a 对于某一段 x 总是同一个值,然后按照类似杜教筛的做法,共有 2a 段,每一段相当于一次区间乘法,可以类似差分地在区间前后打个标记,复杂度2nA,A=max{ai},然后就TLE了。。。

二是确定的 x 对于值域在某一段的 a 总是同一个值,因为答案跟 a 序列的顺序无关,就可以直接把 a 序列值域化,然后对于确定的 x 再枚举 ax 即可,总的复杂度 O(MlogM),M=105

1011. Regular polygon

整点结论:只有正四边形。可以 O(1) 映射。

附录

  1. solutions BY 电子科技大学
  2. 我的代码
  3. 国家集训队2017论文集
  4. To my boyfriend [ 分析,期望 ]