A.排序
B.对某个点操作(1)次后与其他剩下的点距离都大于(k),不能再操作.因此只能操作(1)次,枚举操作的点.
C.对格子根据((i+j)mod 3)分成(3)类,三连必然是每类各(1)个,如果其中有(1)类全是'O'
,有(1)类全是'X'
,则三连数量都为(0).
D.考虑如果(1)不唯一或不在边上,那么对所有(1<k<n),会出现(2)段最小值为(1).
同理,去掉(1)后,如果(2)不唯一或不在边上,那么对所有(1<k<n-1),会出现(2)段最小值为(2).
依次类推,因此如果存在(k>1)的解,那么前(1)~(n-k)个数必然是从两端到中间,并且中间最小值为(n-k+1).
(k=1)判断序列是否为排列即可.
E.如果(b=0)双向添加边权为(1)的无向边,否则正向添加(+1)边,反向添加(-1)边.
枚举每个点(i)为最小值,可以发现其他点的权值必然是从(i)出发的最短路.求出最短路再判断是否符合原来的限制.
由于有负权边,求最短路需要用Bellman-Ford算法.
F.本质是将原序列分成若干段重新连接,使得相邻位置不相等,代价是段数(-1).
考虑已经分成(k)段,能够重新连接当且仅当端点上的数出现次数最大值不超过(k+1).
记出现最多的数为(m),出现次数为(c_m),需要满足(c_mle k+1).
原序列中相邻相等的位置必然要切开,考虑剩下还可以切开的位置是相邻不相等的位置.
如果相邻两个中有(m),那么(c_m)和(k)都会(+1)这种操作没有意义.如果这两个都不为(m),那么操作可以使得(k+1).
考虑是否能通过操作使得(c_mle k+1),如果可以,答案是(k-1).
H1.首先相邻相同的两个颜色可以消掉,直到黑白相间,(f)是剩下点数(/4).
考虑把奇数位置上的颜色翻转,那么就变成相邻不同颜色可以消掉,直到剩下颜色全相等.那么(f)就是两种颜色数量差的绝对值.
因此枚举问号对翻转后贡献颜色的数量,就可以算出H1.