noip 模拟赛

R1

感觉很久没有打过长时长比赛了,心态又开始报废。

而且旁边的人话比较多。

我觉得我不跟别人说话分数会高特别多。

所以还是要平静。

题目的话感觉 B 比较有意思,C 甚至没有很听懂。太 sb 了。

B 3

现在有 \(n\) 个数,要保留其中的 \(m\) 个数,使得这 \(m\) 个数在环上任意相邻的两个数的和的最大值最小。

做法 2

做法二是维护一个堆,时时刻刻记录相邻和最大的一组数相关的位置,每次贪心的删除和最大的一组数中较大的那一个。

证明其实比较水,就是每次考虑最大的和出现的位置,为了让最大的和变得更小,只能删除和最大的位置,因为这个位置是迟早要删掉的。

最后记录完删除顺序再用链表离线回溯一遍就做完了。

做法 1

做法一是二分 \(x\),设 \(< \dfrac{x}{2}\) 的是小数,否则是大数,两个小数之间不能有大数,所以直接用 vec 存一下小数的位置两两之间扫一下中间有无大数就行了。

用这样的方法可以轻而易举的统计处 \(x\) 以内和的最大选数的数量。

R2

感觉 4h 的模拟赛时间永远不够,4.5h 的模拟赛时间刚刚好,太爽了。

A 3

神人 wcy 日常不会树形 dp。

选择两个点 \(x,y\) ,删除这两个点之间完整的一条路径,求最后剩下的联通块大小 \(\ge k\) 的数量的最大值。

\(f_u\) 表示 \(u\) 点及其子树上选择两个点删除这条链之后剩余的答案。

\(g_u\) 表示 \(u\) 点出发删除到子树内 \(v\) 点的答案,也就是可以向上继承。

然后求 \(g\) 的时候统计最大值和次大值。

其实我都不知道我这个 trick 做过多少遍了,但是这次遇见还是不会。

B 4

现在有 \(n\)\(m\) 边图,点有点权 \(H_i\),边有边权 \(L_i\),可以选择让点往所连接的一条边上面倒,要求 \(\sum H_i \leq L_i\),其中 \(H_i\) 是选择倒下的点权。

首先分类,设边 \(L_i\) 所连接的两个点点权分别为 \(x,y\),不妨设 \(x\leq y\)

  1. \(L \ge x + y\) 那么就算是 \(x,y\) 全部倒下都是好的。所以直接全部倒下。

  2. \(x \leq L < x + y\) 标记这条边,以后来处理。

  3. \(x \leq L < y\) 只能倒小的那个,所以直接决定倒小的那个。

  4. \(L < x\) 那完全不能倒,直接把这条边删了。

然后对于标记的边,建无权图。

因为定义,所以每个点能且仅能倒向一条边。这个连通块有 \(n\) 个点,如果是 \(n-1\) 条边,那么一定倒不下,否则一定比基环树还稠密,所以直接不管这个连通块把这些可以倒的点的数量都加上就好了。

联通块直接完全不可能影响。最后用并查集缩联通块就可以做完了。

* C 5

感觉比较难的构造之类的东西。有点灵异。

到时候来写。

R3

特别困,打的很差。

A 3

\(n\) 个点,\(m\) 次连边,每次连边连 \(s\rightarrow l, s\rightarrow l + 1, s\rightarrow l + 2, s\rightarrow l + 3\cdots, s\rightarrow r\),求 \(1\) 到每个点的最短路。

线段树优化建图。但是卡常没卡过去。

B 4

image

神人贪心。但是赛时看出来了。

先二分,然后不确定的部分如果确定了就可以田忌赛马,否则就考虑怎么样才能让有上帝视角的田忌获得尽量少的得分。

于是直接用尽量强的人去守护权重更高的位置就好了。

随便把对方队排排序,自己这里正常田忌赛马,模拟即可。

C 7

\(n\) 长度序列,\(m\) 个操作,操作有两类:单点加一和全局求长度为 \(k\) 的区间的最大值之和。

感觉很难。赛时打了最低档暴力,hyb 讲了笛卡尔树不带修改的部分分,但是我赛时没做出来,太菜了。

posted @ 2025-11-17 18:47  ChihiroFujisaki  阅读(8)  评论(0)    收藏  举报