2017-Sp253-team2
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
[[Image(1.png,500px)]]
[[Image(2.png,500px)]]
== 流水账 ==
压哨AK反杀高大爷,sub牛逼!
=== chenjb ===
感觉今天还好,最后有点惊险,感觉中间还是有点慢,最近多校好像都这样......
=== oipotato ===
=== subconscious ===
== 题解 ==
* A:随便找一个不是很低的位置,算下10的这个次方mod n的结果,然后在这个位置放上9或者n,哪个小放哪个,如果n还有,就继续往高位找一个同余的位置,直到把n放完结束。
* B:十进制快速幂。
* C:算出通项公式,分类讨论,用bsgs,注意块大小、调参和unordered_map。
* D:在x和y上都是不超过2e5的’p‘,走完尾巴到环上,用倍增求出每个横坐标下最左和最右的点,然后求凸包即可。
* E:f[mask]表示mask这张子图的最大独立集大小,考虑当中的第一个点,不在独立集中就减掉它转移,在独立集中就减掉和它相连的点转移过来。
* F:转化为补图的独立集,补图上的边当且仅当两个数bit为1的数量差1,则其奇偶性不同,分为二分图跑即可。具体为把最小点覆盖的点去掉,剩下即为最大独立集。最小点覆盖输出方案是增广之后,对于未在匹配里的点重新尝试增广并标记左侧和右侧是否到达,左边未标记点和右边标记点是覆盖集里的点。
* G:首先考虑长度严格大于的,枚举所有不为0的第一个位置,然后用组合数算剩下位置的选择;考虑长度相等的,用f[i][j][0/1]表示取前i个的子序列,取了j个,0代表目前还相等,1代表大于的方案数,最后取f[n][m][1]。
* H:依次标号,对于每个约束条件给相邻的字母连边,拓扑排序即可。注意各种corner case如字符串为0,字符数量分别不等这些情况。
* I:一定存在一个点在左下角,并且一条边顶到底线或者右侧线的情况,枚举排列,三角形可以上翻或者下翻。
* J:显然每个条件都可以化为存在某个点为中心,出发三条不重叠长度为x,y,z的链。每个点为中心,伸出的三条最长链,用换根dp求出。对于每个询问,离线之后三维数点找到某个三项都大于等于其的,只剩下调整每个链的长度,直接用倍增维护即可。


流水账
压哨AK反杀高大爷,sub牛逼!
chenjb
感觉今天还好,最后有点惊险,感觉中间还是有点慢,最近多校好像都这样......
oipotato
subconscious
题解
- A:随便找一个不是很低的位置,算下10的这个次方mod n的结果,然后在这个位置放上9或者n,哪个小放哪个,如果n还有,就继续往高位找一个同余的位置,直到把n放完结束。
- B:十进制快速幂。
- C:算出通项公式,分类讨论,用bsgs,注意块大小、调参和unordered_map。
- D:在x和y上都是不超过2e5的’p‘,走完尾巴到环上,用倍增求出每个横坐标下最左和最右的点,然后求凸包即可。
- E:f[mask]表示mask这张子图的最大独立集大小,考虑当中的第一个点,不在独立集中就减掉它转移,在独立集中就减掉和它相连的点转移过来。
- F:转化为补图的独立集,补图上的边当且仅当两个数bit为1的数量差1,则其奇偶性不同,分为二分图跑即可。具体为把最小点覆盖的点去掉,剩下即为最大独立集。最小点覆盖输出方案是增广之后,对于未在匹配里的点重新尝试增广并标记左侧和右侧是否到达,左边未标记点和右边标记点是覆盖集里的点。
- G:首先考虑长度严格大于的,枚举所有不为0的第一个位置,然后用组合数算剩下位置的选择;考虑长度相等的,用f[i][j][0/1]表示取前i个的子序列,取了j个,0代表目前还相等,1代表大于的方案数,最后取f[n][m][1]。
- H:依次标号,对于每个约束条件给相邻的字母连边,拓扑排序即可。注意各种corner case如字符串为0,字符数量分别不等这些情况。
- I:一定存在一个点在左下角,并且一条边顶到底线或者右侧线的情况,枚举排列,三角形可以上翻或者下翻。
- J:显然每个条件都可以化为存在某个点为中心,出发三条不重叠长度为x,y,z的链。每个点为中心,伸出的三条最长链,用换根dp求出。对于每个询问,离线之后三维数点找到某个三项都大于等于其的,只剩下调整每个链的长度,直接用倍增维护即可。