ABC218
A
签到
B
签到
C
给定两个\(n*m\)的\(01\)矩阵,问两个矩阵有\(1\)的子矩阵部分是不是通过平移旋转得到的
解:
恶心模拟
首先是找到双方左上角第一个#的位置,然后以此为重叠位置开始遍历
然后再每次旋转\(90°\)
D
给\(n\)个点,选四个组成平行于坐标轴的矩形的方案数
解:
用\(map\)存一下每一行的哪些列有点,枚举矩阵的左下角和右上角
E
一个最小生成树,把最小生成树以外的边权为正的边都取走
F
给一个边权都为\(1\)的图,求去掉每一条边时从\(1\)到\(n\)的最短路长度
解:
先跑出来一条最短路,非最短路上的边直接输出最短路
最短路上的边最多只有\(n\)条,暴力枚举去掉哪一条,然后\(bfs\)再求一遍
G
有一棵树,有偶数点权,一开始有一颗棋子在根\(1\),每次可以把棋子移动到相邻节点,不能重复走,\(Alice\)想要走过的数字中位数最大,\(Bob\)想要中位数最小,求最后的中位数。
解:
我一开始在考虑答案序列怎么储存在根节点上,结果其实序列只要维护到叶子节点,把答案返回父亲
我们可以用一个权值线段树动态维护一个节点到根节点上出现过哪些数值,并且线段树上二分
然后交替返回答案的最大值和最小值
H
有\(n\)个球,把\(R\)个染成红色,\(n-R\)个染蓝
对于\(1\sim n-1\),若第\(i\)个和第\(i+1\)个球的颜色不同,则获得\(a_i\)收益,求最大收益
解:
\(wqs\)二分\(dp\)