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!

posted @ 2019-08-19 08:11  suwakow  阅读(163)  评论(0编辑  收藏  举报
Live2D