CF725F Family Photos 做题记录

nn 个大小为 22 的照片堆,每张照片可以用一个二元组 (a,b)(a,b) 描述,每个堆可以用一个四元组 (a1,b1,a2,b2)(a1,b1,a2,b2) 描述,表示堆顶的照片为 (a1,b1)(a1,b1),堆底的照片为 (a2,b2)(a2,b2)

Alice 和 Bob 要轮流取照片,Alice 先手,轮到某个人取时他可以选择跳过,若一轮中两人均选择跳过则游戏结束。

对于一张照片 (a,b)(a,b),Alice 取它能获得 aa 分,Bob 能获得 bb 分,位于堆底的照片要等到相应堆顶的照片被取掉才能取。

记 Alice 的得分和为 tata,Bob 的为 tbtb。Alice 的目标是最大化 tatbta-tb,Bob 则要最大化 tbtatb-ta

两人绝顶聪明,求出游戏结束时的 tatbta-tb

1n1051\le n\le 10^50a1,b1,a2,b21090\le a1,b1,a2,b2\le 10^9

考虑每堆只有一张照片的情况,由于 0a,b0\le a,b 所以每张照片必然都会被取走,那么考虑先令 ta=a,tb=bta=\sum a,tb=\sum b,则 Alice 取走 (x,y)(x,y) 会令 tatbta-tb 加上 x+yx+y,Bob 取走它也会令 tbtatb-ta 加上 x+yx+y,所以两人必然会按照 a+ba+b 从大到小的顺序取走照片。

考虑推广到原题,但是有个问题就是不一定每张照片都被取走。考虑这样做的深层原因,对于两张照片 (x1,y1)(x1,y1)(x2,y2)(x2,y2),若 x1+y1>x2+y2x1+y1>x2+y2,则变形可得 x1y2>x2y1x1-y2>x2-y1y1x2>y2x1y1-x2>y2-x1,也就是说无论先后手先取 (x1,y1)(x1,y1) 肯定优。

那么不难发现对于一个照片堆 (a1,b1,a2,b2)(a1,b1,a2,b2)

  • a1+b1a2+b2a1+b1\ge a2+b2,则两人都想取走上面那个,那么对于这些堆中的照片按照 x+yx+y 从大到小排序,轮流取即可。注意这样堆顶的照片一定会先被取走;
  • 否则 a1+b1<a2+b2a1+b1<a2+b2,则变形得 (a1b2)+(b1a2)<0(a1-b2)+(b1-a2)<0
    • a1b2<0a1-b2<0b1a2<0b1-a2<0,则双方均不想动这堆,这堆对答案没贡献;
    • a1b2<0a1-b2<0b1a2>0b1-a2>0,则 Bob 会取这堆,对答案贡献 a2b1a2-b1
    • a1b2>0a1-b2>0b1a2<0b1-a2<0,则 Alice 会取这堆,对答案贡献 a1b2a1-b2

时间复杂度 O(nlogn)O(n\log n)