A. 灯
题意:给出n个灯的颜色,颜色至多m种,q次操作,每次改变某种颜色灯的状态,求有多少极长的开着的灯的连续段。
理解错题,极长指不能再延长,而不是问最长段有几个。
转化成图就是求连通块数=点数-边数,也就是亮着的灯数-相邻的亮着的灯对数。
然后还是不好维护,考虑暴力点的根号做法。
按出现次数分轻重点,轻点暴力,重点维护所有该颜色两侧亮着的轻点数。
轻重都可以根号更新,得解。
B. 十字路口
题意:n个红绿灯有固定的周期,在一个周期中,每个红绿灯恰好一次由红变绿,由绿变红。m次观察,给出每个红绿灯此时的状态(绿灯为0,红灯为距绿灯有多久),求周期。无确解输出-1。nm<=1e5
设(x_i)为第i次观察的时刻(d_i)为距离绿灯的时间,如果同一个红绿灯被观察到两次红灯,可以列出(x_i+d_i=y_i+d_y(mod T))。
据此关系建图,边权为时刻差,这样用floyd最小环便是最小周期。(O(nm^2+m^3))
同理可以向前列出关系,这样是(O(mn^2+n^3))
%Dc,(min(n,m)<=sqrt{nm})
这样用较小的计算复杂度(O(nmsqrt{nm}))
C. 密室逃脱
题意:n个房间由n-1条隧道连成链,隧道正常下关闭,打开第i个隧道需要在第i个房间固定(a_i)个人按住开关或者在i+1房间固定(b_i)个人按开关,一旦松开立刻关闭,除固定以外的人可以穿过隧道移动。求最多安置多少人使得少于m个人能够到达1号房间。n<=1e3,a b m<=1e4
部分分符号写反了。。。
正解dp,基于对性质的分析。
发现一定是先抱团,可以利用左边的把右边的带过来,为了避免卡住回不来会留一些人在左边。
这样最后的局面一定是呈若干段,每段内除了固定的一部分人外可以自由移动,所以在可以回到左边的情况下会使最多的自由人到右边拉人。
根据这些性质设f[i][j]为到达第i个房间的人数恰好(最多)为j时,前i个房间最多有多少人。
有了定义转移挺明显的。
(1)转移没必要线段树,变量记录最大的f[i][j]在外层更新即可