[2024.11.06]NOIP 模拟赛

不会tarjan不会广义串并联图……

赛时

T1 看上去很可做。

看到中位数首先想到二分。在二分的背景下,问题转化为求当前最多能使多少个元素大于等于某个定值。

我们不妨先让所有的元素都选择 \(a\) 值,然后相当于要选择一段连续的 \(b\) 替换一些 \(a\),要求最后总和最大。所以可以新设一个代价数组 \(v\),并令:

\[v_i= \left\{ \begin{array}{lc} 0 &a_i\le x\operatorname{and} b_i\le x\\ 0 &a_i\ge x \operatorname{and} b_i\ge x\\ 1 &a_i\le x \operatorname{and} b_i\ge x\\ -1 &a_i\ge x \operatorname{and} b_i\le x\\ \end{array} \right. \]

然后跑一个最大连续子段和就可以了。

T2 第一眼看上去以为 \(n,m\le 10^3\) 以为不可做。然后问了旁边的人他说 \(n,m\le 15\)

因为 \(2^{15+15}=1,073,741,824>>300,000,000\),所以我猜正解是类似状压什么的东西。旁边的人告诉我没有部分分,所以我只能去推正解了。

但是推着推着这道题变成了子序列和为定值的存在性问题,这个显然没有非指数级做法,不会了,我又问了一遍旁边的人,他说没有部分分。

大概 9:30 的时候题目终于下发部分分了,当我看见 T2 的部分分表格时,我直接红了啊,然后去把旁边的人😡🤬

忍住气,去把 T2 的 \(17+10+13+13\) 写了,写完以后我发现当精确计算复杂度的时候会 TLE 13pts。

其它部分分不会写,但此时我已经感觉这道题像是一个 dfs+剪枝 了。

自己手推了一些,比如和为定值直接返回,和大于等于定值直接返回,剩下和小于定值直接返回……

写完以后本地自己造的样例跑了 1.58s,于是我开始卡常,用变量代替数组,能不开 long long 就不开……,写到大概 10:00 感觉差不多了。

此时在比赛首页看到一个压缩包,点开以后才知道这场比赛原来是有大样例的。我测了测,然后出事了,T1 挂了。

我慌了,检查发现是自己 \(v\) 数组赋初值时逻辑嵌套有问题,改过以后就过了。

去看 T3,一开始读错题了,没看到两条路径,去写了个 Floyd 回来发现样例假了才意识到。

然后想到该条件等价于两点在一个边双内,所以去写 Tarjan 了。

写到大概 11:40 调过了小样例,但是大样例假了。

手推了推发现该思路好像不成立,正确思路应该是从一个边双向外拓展。此时感觉有点来不及写完了,T4 也不想看了,就接着去给 T2 卡常了。

赛后

T3 的思路其实没有假,赛时应该是代码问题。好在只挂了十分。

T3 旁边的人说思路不难想,但是写不动。

T2 发现赛时所有的 100pts 只有我是单向搜索+剪枝,但是时间碾压所有的双向搜索,看来还是要相信剪枝的复杂度。

posted @ 2024-11-06 15:26  Redamancy_Lydic  阅读(29)  评论(0编辑  收藏  举报