2020 CCPC Wannafly Winter Camp Day5
https://ac.nowcoder.com/acm/contest/4120
A - Alternative Accounts
题意:有 场比赛,知道每场哪些人参加,同一场的账号一定不会是同一个人,问至少有多少真人。
当 时,最少为参加比赛的人数。
当 时,最少为 。
当 时,以二进制表示状态,则互补的账户可能是同一个人,且参加两场的只可能会和只参加一场的账号是同一个人。所以把参加两场的先加入答案,再从对应的参加的人数中减掉,表示他们被消耗掉了。最后还剩下的都是只参加一场,且没有人合并的,他们可能三场都是同一个人,所以再取 加入答案。
1 |
|
G - Cryptographically Secure PRNG
题意:给定质数 ,问有哪些数 ,满足 的逆元是 ~ 的逆元中最小的。
枚举
先说结论:从 开始枚举,当遇到第一个满足 的逆元 时结束,由于 要小于前缀的 ,所以枚举的同时记录逆元最小值,判断当前如果 ,则把 和 都加入答案,复杂度为 。
证明:
假设 ,且 。
若 ,则 ,即 ,所以 不可能成为答案。
若 ,则在 之前必定已经枚举过 ,也就已经统计过答案了。
所以在 之后的都不需要考虑了。
又易证 满足条件等价于 满足条件,不满足则都不满足,所以可以放在一起考虑。
则复杂度等于满足 的前缀的长度,打表发现是 ,常数在10左右,不会证,有大佬会证求告知。
1 |
|
I - Practice for KD Tree
题意:一个初始全为 0 的方阵,先 m1 次矩形区间加,再 m2 次矩形区间询问最大值。
如果直接莽二维线段树,区间修改需要持久化标记。
但是这里是先全都修改完再询问,所以对于修改操作,先用二维前缀和暴力修改完。对于询问操作再用只需要询问的二维线段树。
但是本题恶心的地方在于卡常!!
二维线段树有两种写法。
第一种是分别两个函数处理行和列,在一个函数中调用另一个。
但是问题在于,这样的空间是 ,因为两个维度都要开4倍,所以空间gg。
但是本题虽然写了空间限制,但却并没有卡死??所以还是能过??
1 |
|
第二种是把行和列一起处理,这次二分行,下次二分列,再下次二分行,再再下次又二分列。。。
但是这样时间上又会比第一种慢,虽然不知道为什么,但是慢了3到4倍。
在写的时候还发现,**把 ans 作为全局变量修改,比作为返回值要快。**这才终于卡过去。
1 |
|