ZROI 19.08.06模拟赛
写在前面:为了保护正睿题目版权,这里不放题面,只写题解。
今天正睿又倒闭了,从删库到跑路。 天祺鸽鸽txdy!
- A
“不要像个小学生一样一分钟就上来问东西。”——蔡老板
虽然配图确实很有迷惑性。
所以读题不仔细,爆零两行泪。
“这题也就NOIP第二题难度吧。”——R爷
\(30pts:\)
显然的暴力,读懂题意之后\(O(w\times h)\)模拟即可。
\(100pts:\)
每根短棍的效果在于交换相邻数。所以最后一定仍是个排列。
可以默认每个位置都要交换,拆掉某根短棍就等价于换回来。
从某个位置出发,只看位置不看标号,球的轨迹是确定的,可以每次修改时\(O(1)\)算。
交换时只换标号,找标号时只按出发时的位置考虑。
代码很短,然而\(7\)行的东西我写+拍了\(2.5h\),菜死了。
标算是treap,那我岂不是把标算踩了
R爷的考场策略:\(15\min\)内写完treap,调试\(15\min\),大概半小时就能过掉了。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(n\log^2 n)\),需要卡常。
Sol2:
一条边断开之前,整个连通块信息都是完全相同的。
而且对于一棵树,断开的边在重新连上之前,两边的信息是不可能沟通的。
对每条边记录断开时的连通块信息总数,再合并时直接加上两边,减去之前记录的权值即可。正确性显然。
LCT维护,复杂度\(O(n\log n)\)。这做法好显然啊,再给我一个小时没准我就过了
注:Sol1是原题std,Sol2是R爷发现的,爆踩了原题标算。R爷tql!