ICPC2023 南京站 个人简要题解
南京,俺仅谋过一次面的第四精神故乡!
单挑 5-688 好想找个队友一起打……单开 too 坐牢。
A
大众变态搜索题。
首先我们考虑,对于一只袋鼠来说如何判断是否可以存活?场上想了很多种方法,然后没看到 $n\times m\leq 10^3$ ,所以我们不难提出一个 $O(n^2m^2)$ 的暴力思路,我们对于每一只袋鼠 $i$ ,考虑枚举所有其他袋鼠 $j$ 进行判断是否合法。
具体而言,我们把 $(x_i,y_i,x_j,y_j)$ 这四个量压成一个状态,然后进行搜索,当且仅当存在一个状态 $(x_i^{‘},y_i^{‘},x_j^{‘},y_j^{‘})$ 使得 $(x_i^{‘},y_i^{‘})$ 在场上且 $(x_j^{‘},y_j^{‘})$ 不合法。代码实现里用了一些小技巧,反正可以写成类似记忆化的思想以保证复杂度,具体可以看代码实现。
记得使用 unordered_map
,用 map
喜提 +1 难绷。
1 | /* |
C
本来以为是数学题丢了没开,但是发现同校队伍过了一卡车感觉不对劲,顶真了一下就做完了
我们考虑把柿子转化一下:
$$
g\oplus (P-1)\bmod 1(\bmod P) \
\rightarrow g = (k\times P +1)\oplus (P-1) (k\in \Z)
$$
然后接下来我们不妨考虑一下 $k$ 和 $m$ 的关系,显然 $k \leq \lfloor \frac{m}{p}\rfloor$ ,但是你会发现由于 $\oplus$ 的存在,我们需要对 $[\lfloor \frac{m}{p}\rfloor,\lceil \frac{m}{p}\rceil]$ 这段手动计数一下以防漏了一些答案点,显然这个点数不多直接做就 OK 了。
1 | /* |
F
神秘建图题。
首先我们发现,对于每一个位置 $i$,有用的仅仅只有最后一次修改,其他在这个位置上的修改都可以任意排序。
所以我们不妨记录一个位置最后是哪一次修改,记作 $pos_i$。我们只需要把所有在 $i$ 上的修改 $j$ 建边 $j\rightarrow pos_i$ ,显然搞出来一张 DAG。如何构造方案?有个比较通用的巧妙做法是求字典序最大的拓扑序,再判断是否与排列相同,相同就寄了。代码很好写,+1 是因为最开始想错了,前面哪个先后无所谓的。
1 | /* |
G
巧妙的贪心题!
首先我们考虑,我们对于 $k$ 个免费取的物品显然是必定取 $k$ 个,然后我们应当取的是哪些?显然应该从体积最大的开始选起,所以不难想到先把体积从小到大排序。
但是很快你就会发现这个贪心有点问题,所以我们改进一下,考虑 $dp_i$ 代表前 $i$ 个物品来做背包,后 $n-i$ 个物品类似滑动窗口一样贪心取 $k$ 个价值最大的即可。
还是挺好玩的题
1 | /* |
I
签到题,直接等价于区间覆盖就可以了。
1 | /* |
L
很巧妙的贪心转化……吃个饭回来写
M
小清新 DS,吃个饭回来写
ICPC2023 南京站 个人简要题解