数学方法转化限制条件(使大于小于等于号左右互为相反数,变成绝对值)+加减交错法构造博弈论下界推出最优解再用限制代入:AT_agc056_d

本文搬运自本人高中时期CSDN博客,若图片加载不出来,可到原文查看:https://blog.csdn.net/zhangtingxiqwq/article/details/135089890

https://vj.imken.moe/contest/600552#problem/G

考虑对题目进行转化

LSaRL \le S_a \le R

2L2Sa2R2L\le 2S_a \le 2R

2L+SbSa+S2R+Sb2L+S_b\le S_a+S\le 2R+S_b

2LSSaSb2RS2L-S\le S_a-S_b\le 2R-S

2LS+SaSb2R2L\le S+S_a-S_b\le2R

LRS(L+R)+SaSbRLL-R\le S-(L+R)+S_a-S_b\le R-L

x=S(L+R)x=S-(L+R)

x+SaSbRL|x+S_a-S_b|\le R-L

转化后得新题意:

给定 xx ,先手加,后手减,求绝对值最小。

考虑 x=0x=0 ,显然下界为 (a2a1)+(a4a3)+(a6a5)+...(a_2-a_1)+(a_4-a_3)+(a_6-a_5)+... ,从博弈论的角度来思考,下界是可以取到的。

但有了 xx 的限制呢?如果直接加,显然是错误的,因为我们默认Alice取了 xx ,但可能是Bob取了(?)。但我们可以搞到 aa 里面。枚举一个 ai+=xa_i+=x ,然后排序后照做,取最小值即可。

1
2
3
4
5
6
7
8
9
10
11
12
n=read(); L=read(); R=read(); mn=1e18; 
for(i=1; i<=n; ++i) a[i]=read(), S+=a[i];
x=S-(L+R);
for(j=1; j<=n; ++j) {
ans=0;
for(i=1; i<=n; ++i) b[i]=a[i];
b[j]+=x; sort(b+1, b+n+1);
for(i=1; i<=n; i+=2) ans+=(b[i+1]-b[i]);
mn=min(mn, ans);
}
printf(mn<=R-L ? "Alice" : "Bob");