P2123 皇后游戏

image.png

很显然对于上式,要使得每一个 cic_i 尽可能小,因为 ci−1c_{i-1} 尽可能小,cic_i 也会尽可能小。

作如下考虑

x,x,x,x,j,i,x,x,x,xx,x,x,x,j,i,x,x,x,x

x,x,x,x,i′,j′,x,x,x,xx,x,x,x,i',j',x,x,x,x

假设有两个相邻的位置 ci,cjc_i,c_j,在什么情况下交换 ci,cjc_i,c_j 能使 cjc_j 减小。

令 sumi=∑j=1iajsum_i=\sum\limits_{j=1}^i a_j.

那么有

cj=max(cj−1+bj,sumj+bj)c_j=max(c_{j-1}+b_j,sum_j+b_j)

ci=max(cj,sumi)+bi=max(cj−1+bj+bi,sumj+bj+bi,sumi+bi)c_i=max(c_{j},sum_i)+b_i=max(c_{j-1}+b_j+b_i,sum_j+b_j+b_i,sum_i+b_i)

交换后有

ci′=max(cj−1+bi,sumi−aj+bi)c_{i'}=max(c_{j-1}+b_i,sum_i-a_j+b_i)

cj′=max(cj−1+bi+bj,sumi−aj+bi+bj,sumi+bj)c_{j'}=max(c_{j-1}+b_i+b_j,sum_i-a_j+b_i+b_j,sum_i+b_j)

那么 cj′≥cic_{j'} \ge c_i 这说明 jj 在 ii 前面。

首先,如果 ci=cj−1+bj+bic_i=c_{j-1}+b_j+b_i,那么 cj′≥cic_{j'} \ge c_i 一定成立(很好理解吧)。

所以在比较 cj′,cic_{j'},c_i 时可以忽略 cj−1+bj+bic_{j-1}+b_j+b_i.

所以只需要比较

max(sumi−aj+bi+bj,sumi+bj)≥max(sumj+bj+bi,sumi+bi)max(sum_i-a_j+b_i+b_j,sum_i+b_j) \ge max(sum_j+b_j+b_i,sum_i+b_i)

max(sumi−aj,sumi−bi)≥max(sumj,sumi−bj)max(sum_i-a_j,sum_i-b_i) \ge max(sum_j,sum_i-b_j)

然后再减 sumisum_i,注意 sumj−sumi=−aisum_j-sum_i=-a_i

max(−aj,−bi)≥max(−ai,−bj)max(-a_j,-b_i) \ge max(-a_i,-b_j)

min(aj,bi)≤min(ai,bj)min(a_j,b_i) \le min(a_i,b_j)

也就是说,如果上式满足,则有 jj 在 ii 前面。

但不具备传递性,也就是假设有 jj 在 ii 前面且 kk 在 jj 前面,不一定有 kk 在
ii 前面。

分类讨论

  1. ai≤bia_i \le b_i 则有 aj≤aia_j \le a_i且 aj≤bja_j \le b_j 这一组按aa升序排列。

  2. ai>bia_i > b_i 则有 bj≥bib_j \ge b_i或bj≥ajb_j \ge a_j 这一组按bb降序排列。

如果 ai−biabs(ai−bi)≤0\dfrac{a_i-b_i}{abs(a_i-b_i)}\le 0,分到11.

如果 ai−biabs(ai−bi)>0\dfrac{a_i-b_i}{abs(a_i-b_i)}> 0,分到22.

代码就很好写了,记得long long。