cf round439
A
题目要求
给出数组a和数组b 数组大小分别n
问存在多少对(i,j) 使得ai xor aj的值在这2n个数字中
参考AC代码
|
|
思路
暴力
用set有n²logn的复杂度都能过 hash每一个数字把复杂度降到n²当然更快
B
题目要求
问b!/a!的末尾数字是多少 保证b>a
参考AC代码
|
|
思路
只要b-a的大小超过10 末尾必然会乘上10 使得最后一位肯定0
如果小于10 暴力最后一个位置就行了
C
题目要求
有红 蓝 紫色三种颜色的点 给出三种颜色点的数量
可以在两个点之间连一条权值为1的边 但必须满足以下规则:
相同颜色的点不能连接 若连接必须确保他们之间的距离大于等于3
问一共有多少种连法 答案mod 998244353
参考AC代码
|
|
思路
推到出公式为:∑k=0到min(a,b) C(a,k)C(b,k)k!
以上结果为ans1 换成a和c为ans2 换成b和c为ans3 答案就是ans1×ans2×ans3
预处理组合数取模和阶乘 可以降低复杂度
公式推导思路为:
三种颜色两两相连只有三种情况 考虑每种情况 相乘即可
假设现在是a和b 我们从a和b中取同样的k个(必须取相同的个数是为了保证可以一一对应相连) 所以这里k的上限为min(a,b)
再乘以k!是因为对应k!种连法 遍历k把这些情况加到一起就是第一种连法的总个数
这里的距离大于等于3等价于不存在两个点直接相连或者不存在某个点连接2个相同的颜色 所以得到k!种连法
E
题目要求
在一个n×m的方格板上,操作1将一个矩形区域的边界上加上一圈障碍,操作2将一个矩形区域的边界上的障碍移除,操作3询问两点是否能不越过障碍互相到达。题目保证任意两圈矩形障碍不会相交
参考AC代码(暴力差分)
|
|
参考AC代码(二维树状数组+hash)
|
|
思路
问题转换为:二维坐标上有一些相互嵌套但不相交的矩形 每次询问2个点能否不越过这些矩形直接相连
思路1:对于1操作 每一行我们给出一个块号 并用差分的思想把起点和终点分别赋值为k和-1
对于2操作 我们只需要把这些行的起点终点清空
对于3操作 我们只需要找到2个点所在的块号ans1和ans2 若在同一个块 可以到达 否则不可以到达
注意这里找到块号的操作:第一个st为0 并且该值大于0的才是块号
注意用这种方法数组不能开大 以及要注意常数 写丑了会tle
思路2:我们每次hash一个数值来代表块号 然后用二维树状数组更新矩形里的数字 最后判断2个点的数字是否相等就可以判断是否为同一个块
只要确保hash的数值足够大就可以保证几乎不冲突