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\)
-
\(L \ge x + y\) 那么就算是 \(x,y\) 全部倒下都是好的。所以直接全部倒下。
-
\(x \leq L < x + y\) 标记这条边,以后来处理。
-
\(x \leq L < y\) 只能倒小的那个,所以直接决定倒小的那个。
-
\(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

神人贪心。但是赛时看出来了。
先二分,然后不确定的部分如果确定了就可以田忌赛马,否则就考虑怎么样才能让有上帝视角的田忌获得尽量少的得分。
于是直接用尽量强的人去守护权重更高的位置就好了。
随便把对方队排排序,自己这里正常田忌赛马,模拟即可。
C 7
\(n\) 长度序列,\(m\) 个操作,操作有两类:单点加一和全局求长度为 \(k\) 的区间的最大值之和。
感觉很难。赛时打了最低档暴力,hyb 讲了笛卡尔树不带修改的部分分,但是我赛时没做出来,太菜了。

浙公网安备 33010602011771号