2022-team8-005
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
= 概览 =
通过数:10/11 Rank:2/15
== Rank和提交情况 ==
= 流水账 =
这场比赛其实并不是特别顺,但是中程大家的思路都比较流畅,囤了比较多的可写的题,最后靠着通过数取得了一个不差的排名。
= 总结 =
=== xqj: ===
~~这里是总结~~
=== rtx: ===
~~这里是总结~~
=== wch: ===
开场非常想抢一血,K题在比赛开始一分钟的时候就开始写了,结果出了好多小错误,有点不应该。
其实这种事发生好多次了,不应该把一血看得那么重要的。
= 题解 =
* A:
* B:枚举△j,这样题目就变成了:按一个顺序循环拼接每一行,使得字典序最小。解决这个问题,可以先用Hash求LCP之后Sort一遍,求出每一行的字典序排名,再用后缀数组寻找排名最靠前的后缀,即找到了△i。最后暴力比较一遍所有的(△i,△j),找到最小的就好了。
* C:思路:先找出离原点最近的点,这个点一定是好点。然后再把在(原点与当前点连线的垂线)之外的点都删掉,因为它们都不是好点。在此之后,再找剩下的离原点最近的点,以此类推,直到全部找完。想实现这个思路,可以用李超树动态维护关于原点的上凸包和下凸包,这样就可以O(logn)判断一个点在不在凸包内,也可以O(logn)给凸包插入一条直线了。
* D:因为l很小,考虑容斥。枚举一个选集合的状态,计算出(这个状态内所有集合都一定不合法,其他随意)的方案数,然后便可以容斥计算出(这个状态内所有集合一定不合法,其他一定合法)的方案数,这样就计算出答案了。
* E:
* F:我们选择一个集合,把集合内的字符放到最前面在翻转,可以发现这种做法一定对应一种选择若干前缀再翻转的方案。那么我们只需要倒着扫一遍再正着扫一遍,寻找能转换出的字典序最小的字符串就好了。
* G:
* H:枚举每一条边假设它连接了(u,v)。假如u和v拥有都没用过的颜色,那么可以直接给这条边染色。否则,可以选择一个u拥有但是v没有的颜色,然后递归判断能否把连接u的这种颜色的边换成别的颜色。因为不知道正确性所以打的random_shuffle枚举颜色。
* I:
* J:对于一个前缀,它只可能有五种有效的状态:(完全匹配;多了一个<i>;多了一个<b>;两个都有且<i>在前面;两个都有且<b>在前面)。dp转移这些状态,假如到n的时候存在第一种状态,那么就存在答案。
* K:每个数的具体值并没有影响,存在影响的只是这个数二进制位1的个数。设dp[i][j]表示(前i个数,有j位的异或和位1)这个状态是否存在。从i转移到i+1的时候,枚举第i+1个数在这j个位中的k个放1,其他放在异或和为0的位。dp[n][0]=1则存在答案,过程中记一下前驱和当前数值即可得到方案。
概览
通过数:10/11 Rank:2/15
Rank和提交情况
流水账
这场比赛其实并不是特别顺,但是中程大家的思路都比较流畅,囤了比较多的可写的题,最后靠着通过数取得了一个不差的排名。
总结
xqj:
这里是总结
rtx:
这里是总结
wch:
开场非常想抢一血,K题在比赛开始一分钟的时候就开始写了,结果出了好多小错误,有点不应该。
其实这种事发生好多次了,不应该把一血看得那么重要的。
题解
- A:
- B:枚举△j,这样题目就变成了:按一个顺序循环拼接每一行,使得字典序最小。解决这个问题,可以先用Hash求LCP之后Sort一遍,求出每一行的字典序排名,再用后缀数组寻找排名最靠前的后缀,即找到了△i。最后暴力比较一遍所有的(△i,△j),找到最小的就好了。
- C:思路:先找出离原点最近的点,这个点一定是好点。然后再把在(原点与当前点连线的垂线)之外的点都删掉,因为它们都不是好点。在此之后,再找剩下的离原点最近的点,以此类推,直到全部找完。想实现这个思路,可以用李超树动态维护关于原点的上凸包和下凸包,这样就可以O(logn)判断一个点在不在凸包内,也可以O(logn)给凸包插入一条直线了。
- D:因为l很小,考虑容斥。枚举一个选集合的状态,计算出(这个状态内所有集合都一定不合法,其他随意)的方案数,然后便可以容斥计算出(这个状态内所有集合一定不合法,其他一定合法)的方案数,这样就计算出答案了。
- E:
- F:我们选择一个集合,把集合内的字符放到最前面在翻转,可以发现这种做法一定对应一种选择若干前缀再翻转的方案。那么我们只需要倒着扫一遍再正着扫一遍,寻找能转换出的字典序最小的字符串就好了。
- G:
- H:枚举每一条边假设它连接了(u,v)。假如u和v拥有都没用过的颜色,那么可以直接给这条边染色。否则,可以选择一个u拥有但是v没有的颜色,然后递归判断能否把连接u的这种颜色的边换成别的颜色。因为不知道正确性所以打的random_shuffle枚举颜色。
- I:
- J:对于一个前缀,它只可能有五种有效的状态:(完全匹配;多了一个;多了一个;两个都有且在前面;两个都有且在前面)。dp转移这些状态,假如到n的时候存在第一种状态,那么就存在答案。
- K:每个数的具体值并没有影响,存在影响的只是这个数二进制位1的个数。设dp[i][j]表示(前i个数,有j位的异或和位1)这个状态是否存在。从i转移到i+1的时候,枚举第i+1个数在这j个位中的k个放1,其他放在异或和为0的位。dp[n][0]=1则存在答案,过程中记一下前驱和当前数值即可得到方案。
附加文件
- rk.png by engainerW
- submissions.png by engainerW