题目
链接:https://ac.nowcoder.com/acm/contest/10272
E Evil Coordinate
题意:给定由 U、D、L、R 组成的长度为 n 字符串,问是否存在从 (0,0)开始不经过 (mx,my) 这个点的路径,输出重排后的路径。不存在则输出 Impossible
思路:通常的想法是,临近 (mx,my) 这个点时候绕路走。试想一种合理的走法,其实是存在把同一个方向上的都放在一起的走法。所以可以把所有的同一个方向上的走法放在一起,枚举 24 种排列。
总结:首先分析它的合法的路径,然后看看这种路径,存不存在一些等价的、更加简单的路径。总之,就是找到更加便捷的等价路径。
F Fireworks
思路:放 x 次烟花需要的时间是: x n + m 1 − ( 1 − p ) x \frac {xn+m}{1-(1-p)^x} 1−(1−p)xxn+m。三分 x ,然后取极值。
H Harmonious Rectangle
思路:填三个数,一共 9 种不同的排列,但其实 00 、11、22是冲突的,当 max(n,m)>7 时候,就必然成立了。所以在小数据的时候暴力不合法的情况就好了。
- 首先可以看到的是,不合法的情况比合法的情况要少的多。所以想着去找不合法的情况。
- 然后可以看到:枚举的组合只有 9 种。其他都必然合法。那么就直接暴力小数据就好了。
J Just Another Game of Stones
题意:维护两种操作
- 1 l r x 对区间 [l,r] 的元素取 m a x ( a i , x ) max(a_i,x) max(ai,x)
- 2 l r x 对区间 [l,r] 的元素以及 x 做 nim 博弈,问有多少种胜利的取法。
思路:
- 对于操作一,直接用 segment tree beats 维护
- nim 博弈成立的条件是异或和大于 0 。等于 0 直接输出答案。首先取到区间 [l,r] 和 x 异或值,设为 a 。那么对于一堆数量为 b 的石子来说,它存在取法的条件就是:b>b xor a 。只有 b 大于 b,才能够从 b 中拿一些石子,使得 b 变成 b xor a。从而使得下一步的异或结果为 0 。
- 所以就是计数 满足 b>b xor a 这个条件的 b 的数量。假设 a 的最高位为 p ,可以发现只有 b 的第 p 位也为 1 ,才会满足条件。
- 所以最后就是查询区间内,第 p 位为 1 的个数以及区间的异或和
- 所以维护区间内,每一位的个数就好了。
K K Co-prime Permutation(签到)
思路:gcd(a,a-1) =1,因此移位构造 k 个就好了。
L Let’s Play Curling(签到)
思路:把 b 数组的两个元素作为间隔,找最多的 a 的数量。对 a 数组进行二分就好了。
M Monster Hunter
思路:设 f [ u ] [ k ] [ 0 / 1 ] f[u][k][0/1] f[u][k][0/1] 表示以 u 为根的子树中使用 k 次魔法 u 是否使用魔法的最小花费。可以得到转移:
- f [ u ] [ i + j ] [ 1 ] = f [ u ] [ i ] [ 1 ] + m i n ( f [ v ] [ j ] [ 0 ] , f [ v ] [ j ] [ 1 ] ) f[u][i+j][1]=f[u][i][1]+min(f[v][j][0],f[v][j][1]) f[u][i+j][1]=f[u][i][1]+min(f[v][j][0],f[v][j][1])
- f [ u ] [ i + j ] [ 0 ] = f [ u ] [ i ] [ 0 ] + m i n ( f [ v ] [ j ] [ 0 ] + v a l [ v ] , f [ v ] [ j ] [ 1 ] ) f[u][i+j][0]=f[u][i][0]+min(f[v][j][0]+val[v],f[v][j][1]) f[u][i+j][0]=f[u][i][0]+min(f[v][j][0]+val[v],f[v][j][1])