写在前面:为了保护正睿题目版权,这里不放题面,只写题解。
今天正睿又倒闭了,从删库到跑路。 天祺鸽鸽txdy!
- A
“不要像个小学生一样一分钟就上来问东西。”——蔡老板
虽然配图确实很有迷惑性。
所以读题不仔细,爆零两行泪。
“这题也就NOIP第二题难度吧。”——R爷
(30pts:)
显然的暴力,读懂题意之后(O(w imes h))模拟即可。
(100pts:)
每根短棍的效果在于交换相邻数。所以最后一定仍是个排列。
可以默认每个位置都要交换,拆掉某根短棍就等价于换回来。
从某个位置出发,只看位置不看标号,球的轨迹是确定的,可以每次修改时(O(1))算。
交换时只换标号,找标号时只按出发时的位置考虑。
代码很短,然而(7)行的东西我写+拍了(2.5h),菜死了。
标算是treap,那我岂不是把标算踩了
R爷的考场策略:(15min)内写完treap,调试(15min),大概半小时就能过掉了。R爷nb!
- B
(100pts:)
显然答案为(2^x),其中(x)为两个人路径分开的段数。
发现两个人的路径是等长的,可以让两个人同步行动。
对于两个人的路径重合的部分可以简单判断。
否则不妨设(y_1<y_2),即第一个人在第二个人上面。
显然第二个人上面的区块是不会被第二个人走到的,必须由第一个人走到。因此直接通过上面的行的黑块数即可判断第一个人下一步走到哪里。第二个人同理。
按照题意模拟即可,复杂度(O(Tn))。
- C
“我想做个良心出题人,因此开了标算(20)倍时限。”——R爷
然后钱爷爷分块bitset直接*过去了,tqlwsl
(10pts:)
直接模拟,暴力dfs算每个人的信息。
(40pts:)
对于(Q=1)的询问,可以倒过来做dfs,求一条信息最晚什么时候到某个点上,使得这条信息可以传到目标点。
对于一条边((x,y)),设一条信息最晚(t)时刻到(y)是合法的,考虑什么时候到(x)才合法。显然是(t)之前的这条边最晚开着的时刻。
复杂度(O(Q(n+m)))。
(60pts:)
对于一条链的情况,每个点一定收到了一个区间的信息,线段树维护能覆盖每个点的最左最右端点即可。
(100pts:)
Sol1:
考虑点分治,求经过重心的点的贡献。按深度建线段树,子树直接线段树合并即可。算出每条信息第一次到重心的时间,再从重心推下去即可。
注意会算重,需要对每个子树减去自己的贡献。复杂度(O(nlog^2 n)),需要卡常。
Sol2:
一条边断开之前,整个连通块信息都是完全相同的。
而且对于一棵树,断开的边在重新连上之前,两边的信息是不可能沟通的。
对每条边记录断开时的连通块信息总数,再合并时直接加上两边,减去之前记录的权值即可。正确性显然。
LCT维护,复杂度(O(nlog n))。这做法好显然啊,再给我一个小时没准我就过了
注:Sol1是原题std,Sol2是R爷发现的,爆踩了原题标算。R爷tql!