摘要:
"题面" 题解 第$i$个数之前的符号是或那么记为0,是与就记为1,得到一个二进数x 然后按位分开考虑,如果这一行是1那么记为1,如果这一位数位0记为0,得到一个二进制数$b_i$ 第$N$行是最高位,如果这一位是1的话,需要有$x define fi first define se second 阅读全文
摘要:
A Digit Sum 2 从高位到低位数的第i位以前前缀都相同,第i位比当前位上的数小1的情况下,后面都填9 枚举一下然后计算最大的就好 B Holes 如果两个点的话或者所有点共线的话两个端点各是0.5 我们给这些点求一个凸包,由于半径是无穷大,我们只关心凸包上的点相邻两边做垂直平分线交出来的角 阅读全文
摘要:
C 2D Plane 2N Points 把能连边的点找到然后跑二分图匹配即可 cpp include define fi first define se second define pii pair define space putchar(' ') define enter putchar('\ 阅读全文
摘要:
题解 读题是做题关键 我们设$dp[u][l][r]$表示$u$节点上方没改$l$条公路和$r$条铁路 然后记忆化搜索,枚举这条点改左边还是右边 代码 cpp include define fi first define se second define pii pair define mp mak 阅读全文
摘要:
C Traveling Plan 相当于一个环,每次删掉i点到两边的距离,加上新相邻的两个点的距离 代码 cpp include define fi first define se second define pii pair define space putchar(' ') define ent 阅读全文
摘要:
题解 终于了解怎么动态维护虚树了 就是把点按照dfs序排个序啊 这道题显然是求虚树上所有边长的两倍 我们把dfs序排完序,相邻两个点加上路径长(包括首尾),删除的时候删一个点减去它到两边再加上新近相邻的两个点即可 增加同理 代码 cpp include define fi first define 阅读全文
摘要:
题解 随机跳题真好玩 这个就是考虑我们怎么判断点在多边形内,就是点做一条射线,穿过了奇数条边 我们只需要记录一个二进制状态表示每个点的射线穿过路径的次数的奇偶性 枚举起点,然后用BFS的方式更新dp状态 代码 cpp include define fi first define se second 阅读全文
摘要:
A Fairness 如果奇数次是b a 否则是a b B Backfront 找数值最长的连续的一段子序列,然后将剩下的数必须要移动了 D Isomorphism Freak 答案是直径的长度 / 2 + 1 我们对于直径长度为奇数,也就是有偶数个点,如果直径长度增加颜色也要增加,所以我们不增加直 阅读全文
摘要:
题解 发现我们选择一座桥会选择力$\frac{s + t}{2}$较近的一座桥 然后我们只需要按照$s + t$排序,然后枚举断点,左边取所有s和t的中位数,右边同理 动态求中位数用平衡树维护 代码 cpp include define fi first define se second defin 阅读全文