Bronze
T1
题意:
有 $A,B$ 两种物品初始各有 $a,b$ 个。便利店可以每次用 $c_B$ 个 $B$ 物品换取 $c_A$ 个 $A$ 物品,并且可以获取物品盲盒,每个盲盒随机开出一个某种物品。如果想要保证得到至少 $f_A$ 个 $A$ 物品,最少需要几个盲盒。
题解:
由于需要保证得到 $fA$ 个物品,所以实际上求的是最大能塞多少个 $x$ 使得恰好合法。
先把 $a,b$ 处理一下,得到还需要增加 $qA$ 个 $A$,换完以后还剩下 $b’$ 个 $B$。如果 $qA\leq 0$ 直接输出 $0$。
考虑以下两种情况:
- $cA\geq cB$ :此时拿到 $A$ 是更亏的,所以尽量拿 $A$,但是需要注意 $B$ 可以恰好拿到 $cB-1$ 而不换。答案是 $cB-1-B’+qA$。
- $cA<cB$:此时拿到 $B$ 更亏,因此尽量拿 $B$,也需要注意 $A$ 可以在 $B$ 拿的溢出之前恰好拿到 $fA-1$。令 $t=\lceil\frac{fA}{cA}\rceil$ 表示要换的组数,答案是 $t\times cB-B’+\max(0,fA-1-(t-1)\times cA)$。
T2
题意:
给定一个由 $n$ 组 COW/OWC/WCO 拼接成的,长度为 $3n$ 的字符串 $s$ 。
每次操作可以选择一个 $s$ 中的子序列,该子序列按顺序拼接而成的字符串必须符合前一半等于后一半,例如 COWCOW 或者 OWWOWW 。然后将该子序列从 $s$ 中删除。
求最小的操作次数将 $s$ 删空。
题解:
考虑当 $n$ 为奇数时字符串总长为奇数,而每次操作只能删偶数,必定无解。
否则因为 $n$ 为偶数,一定有操作次数为 $3$ 的解,就是 C,O,W 每次删掉一种。
而答案为 $1$ 必定整个删掉,只需判断是否可行即可。
因此只需考虑答案 $=2$ 的情况。
打表或者观察可以发现,将 $n$ 组字符串前后匹配一下,第 $i$ 组和第 $i+\frac{n}{2}$ 放在一起考虑,两组一定会出现CO,OW,WC的至少一个作为共有的子串。把它一起拿走剩下的那个字符也是相同的,因此恰好把整个字符串分成两组,两次即可删除。
实际上答案只可能为 $-1,1,2$。
T3
题意:
给定大小为 $n\times n$ 的矩阵,求所有 $k\times k$ 的子矩阵中的元素和,最大是多少。
初始矩阵全部为 $0$ ,之后 $Q$ 次操作将矩阵中的 $x$ 行 $y$ 列赋值为 $v$,保证赋值后比赋值前大。每次操作以后都需要回答当前矩阵的答案。
题解:
考虑一个位置至多影响周围 $k\times k$ 个小矩阵,而 $k$ 不大,$O(Qk^2)$ 是可以接受的。
维护一个 $b_{i,j}$ 表示以 $(i,j)$ 为左上角(或者其它表示方式)的子矩阵的元素和,每次修改至多修改到 $k\times k$ 个位置,直接暴力维护即可。
而题目保证了答案一定增大,每次答案直接取最大就好。复杂度 $O(Qk^2)$。
Silver
T1
题意:
给定神秘序列 $a$ 的迭代方式,令 $a^{0}={0}$ 表示 $a$ 序列的初始形态;
某次序列 $a^{t}$ 是由转动一次前半后,再令 $a^{t}_{t}=t$ 得到的。具体例子如题目样例解释所示。
$Q$ 次询问,对于 $a^{t}_p=c$ 给定 $t,p$ 求 $c$ 或者给定 $c,t$ 求 $p$。
题解:
首先打表找规律,前面 $\frac{t}{2}$ 的位置非常乱,但是后面的位置可以发现每一个值都是存在一段不动的区间,然后45度角掉到前面的乱序区间参加循环。
考虑一个数在乱序区间的动向,发现一个数被换到某个 $\lfloor\frac{t}{2}\rfloor$ 后只会一点点被挪动到第一位。
同时,它挪动到第一位所用的时间是指数级增长的,所以直接暴力迭代是 $O(\log)$ 的复杂度。
第一问通过恰好超过目标时间的那个第一位的时间点,倒推回目标时间的限制即可。
第二问需要二分出目标位置出于第一位的上一个时间,直到找到一个位置处于不动点得到这个不动点的值。
第一问复杂度 $O(\log t)$ ,第二问 $O(\log^2t)$。细节一大堆,建议把表打出来对着写。
T2
题意:
有 $n$ 个变量 $a_1,a_2,…,a_n$, $m$ 条严格限制和 $n$ 条得分限制。
$n$ 条得分限制表示当 $a_i\in[l_i,r_i]$ 时获得一分。
$m$ 条严格限制表示 $a_x+a_y=z$ 必须成立。
求在满足严格限制的条件下,调整变量能够得到的最大得分。
题解:
这个神秘二元限制容易想到建图,将 $a_x+a_y=z$ 表示为连接 $x,y$ 的边。
观察可得,当图中出现奇环时所有变量值确定,要么无解要么有唯一解,无法调整。这部分可以通过随便选择一个变量作为未知数,得到其它变量与这个未知数的关系解方程得到这个变量,然后倒推,复杂度 $O(n+m)$。
反之,由于不存在奇环,必定是二分图,且左边点每 $+1$,右边点 $-1$。随便找一个点随便赋一个值(比如 $0$)就能填出至少一组合法方案,然后设最终答案与该方案的偏差为 $x$(给左边点 $+x$,右边点 $-x$,$x$ 可以为负数)。可以得到若干个限制条件表示如果 $x\in[l’_i,r’_i]$ 时可以得一分,问题转化为找被覆盖最多线段的点被几个线段覆盖,离散化后差分或者排序后扫一遍即可。
复杂度 $O(n+m\log m)$。感觉也不咋好写。
T3
题意:
有一个长为 $n$ 的隐藏01数组 $a$,给定 $a$ 中所有长度为 $K$ 的区间和的奇偶性,求 $a$ 数组最多/最少包含几个1。
题解:
由于区间和的限制包含高达 $K$ 个变量很难讨论,由区间和想到前缀和,从而得到二元关系。
设 $s_i$ 表示 $a_i$ 的前缀和$\bmod 2$,将以 $i$ 为右端点的区间和限制重写为:给定 $s_i\oplus s_{i-K}$ 的值。$\oplus$ 表示异或。
发现 $K$ 是定值,下标可以按照 $\bmod K$ 的余数分成 $K$ 组。发现第 $0$ 组是定值,而其它组至多只有两种情况,对于第 $i$ 组可以直接以 $s_i$ 的值代表这一组情况的选择。
由前缀和数组的性质可得当 $s_i\neq s_{i-1}$ 时 $a_i=1$,所以问题转化为求最多/最少的位置满足 $s_i\neq s_{i-1}$。
同时发现每一组的贡献只与上一组有关,第 $0$ 组的贡献与第 $K-1$ 组有关。
那么这里可以做一个dp,设 $f_{i,0/1}$ 表示当考虑前 $i$ 组,当 $s_i=0/1$ 时的答案,枚举 $s_i$ 的取值以及 $s_{i-1}$ 的取值计算贡献即可。
注意最终提取答案时需要根据 $f_{K-1,0/1}$ 加上第 $0$ 组和第 $K-1$ 组之间的贡献。比较好的处理方式是可以直接转移到 $f_K$ 然后只取 $f_{K,0}$ 的值,因为 $s_0=0$ 恒成立。
转移的时候计算的点数之和不超过 $n$,复杂度 $O(n)$。

