UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312)
A
把信息存进去然后找就行。
B
枚举右上角,然后模拟判断即可。
C
二分这个 X X X ,然后判断即可。
D
典型的括号类的 d p dp dp 。 d p i , j dp_{i, j} dpi,j 表示前i个字符,左-右= j j j 的方案数,答案为 d p n , 0 dp_{n, 0} dpn,0。若si= ( ( ( 或者 ) ) ) 显然对于任意 d p i , j dp_{i, j} dpi,j 是固定的,故直接继承上一层即可。若为 ? ? ?,则分别加上是 ( ( ( 的方案和 ) ) ) 的方案即可。
E
用一个三维数组记录一下每个位置是哪个块存下标。相邻的两个位置显然满足其中一维的差为 1 1 1 且仅有一维。那么枚举 ( i , j , k ) (i, j, k) (i,j,k),对其相邻的块查看是否有块的存在并且不是他自己的块,如果是就把i的答案里记录一下,相邻的块的所属块也记录一下,用 s e t set set 搞就行。
F
贪心。设物品1,2,3的数量分别为 n 1 , n 2 , n 3 n1, n2, n3 n1,n2,n3 。那么枚举使用 0 n 3 0~n3 0 n3 个物品 3 3 3 的情况下的最大快乐值。贪心的选,那么显然就是在选 1 1 1的是后要取大的,23同理也是。用 n u m 1 , n u m 2 num1,num2 num1,num2 记录一下 12 12 12 的使用数量,如果当前的数量超标就抛弃一个小的。接下来不停的选物品 2 2 2,然后如果当前的这个物品 3 3 3 还可以继续开物品 2 2 2 就并且物品2还有没选的就不停的替换物品 1 1 1(如果比物品1大的话),最后把所有的情况取个 m a x max max 即可。
G
可以发现 ( i , j , k ) (i, j, k) (i,j,k) 的结构一定是如下的:
那么此时可以想到对于每一个 u ( 1 ≤ u ≤ n ) u(1 \leq u \leq n) u(1≤u≤n) 统计形式如上图的这样的三元对个数,加到 a n s ans ans 里即可。那么此时可以想到一个类似与 d p dp dp 的思路来处理这个东西。 t 1 , t 2 , t 3 t1, t2, t3 t1,t2,t3分别表示在u的子树中的满足要求的 1 , 2 , 3 1,2,3 1,2,3 元对的个数。遍历的 u u u 的子节点 v v v ,如果 u u u 的辈分高于 v v v,那么显然可选的点数就是 v v v 的子树大小,否则为 n − u n - u n−u 的子树大小,设其为 k k k。 t 3 t3 t3显然是在 t 2 t2 t2 的基础上选一个,即 t 2 × k t2 \times k