T1 codeJan与恐怖分子

​ 可以根据 codeJan 的位置,将方格矩阵分成四个子矩阵分别考虑。对于每个子矩阵如果存在边长为 0 0 的话,就不用考虑。如果存在边长小于 K 那一定不能完成任务,否则依次按照行列炸毁。因为要炸毁所有区域且允许重复炸一个区域,所以对于 ab a ∗ b 的子矩阵行上需要 [aK\left[\frac{a}{K}\right\rceil 排炸弹,列上需要 bK\left\lceil\frac{b}{K}\right\rceil 排炸弹。注意结果会爆 intint。时间复杂度:O(1)O(1)

T2 codeJan与旅行

​ 可以想象的是如果 mm 足够大,codeJan 最后肯定会选择在相邻的两个城市来回走。所以可以枚举两个相邻的城市 (实际上应该是距离最小的两个城市)。并且直接” 奔向” 这两个城市的应该是最吼的!但是还要考虑,可能先往后退到 一个城市,再” 奔向” 枚举的城市。

举个例子就明白了:n=3,m=10,p=2n = 3,m = 10, p = 2,三个城市的位置是 11 1010 1414。那么应该 先退回到 11,然后再在 10101414 之间来回走。时间复杂度:O(n)O(n)

T3 小Q与氪金游戏

​ 如果 x>=yx>=y,直接枚举氪金单数进行计算,否则不同的抽卡次数会对应不同的氪金单数,可以直接枚举抽卡次数进行计算,只需要枚举足够多项即可达到要求的精度,标程枚举了 10610^6 项。

T4 codeJan与青蛙

​ 先把所有的青蛙按照位置从小到大排序。下面用“代价”代称听到的 WA 次数。dp[i][j]dp[i][j] 表示用 jj 个黑洞收集前 ii 个位 置青蛙的最小代价。枚举第 jj 个黑洞的放置位置 kk,可以得到状态转移方程:

dp[i][j]=min(dp[k1][j1]+cost[k][i])\mathrm{dp}[\mathrm{i}][\mathrm{j}]=\min (\mathrm{dp}[\mathrm{k}-1][\mathrm{j}-1]+\operatorname{cost}[\mathrm{k}][\mathrm{i}])

其中 cost[k][i]cost[k][i] 表示第 kkii 位置的青蛙全部被放在 kk 位置上的黑洞收集的代价。 如果我们定义:

sum[p]=i=1pb[i],fsum[p]=i=1pa[i]b[i]\operatorname{sum}[\mathrm{p}]=\sum_{i=1}^{p} b[i], f \operatorname{sum}[\mathrm{p}]=\sum_{i=1}^{p} a[i] * b[i]

因此可以通过O( nm2)O\left(\mathrm{~nm}^{2}\right)​的复杂度得到 dp[n][m]dp[n][m]。 可以在 dp 过程中顺便记录第 j j 个黑洞的收集数量和前一个状态的最少容量,进行比较更新即可。

T5 珂朵莉与GCD

​ 从一个点 rr 开始往左端的 gcd 最多只会变化 logvlogv 段先预处理出每个点到一端的 所有 gcd 变化的位置然后把询问离线扫描线右端点,维护所有左端点的答案即可总复杂度 O(mlognlogv+nlogv)O( mlognlogv + nlogv )