数学方法转化限制条件(使大于小于等于号左右互为相反数,变成绝对值)+加减交错法构造博弈论下界推出最优解再用限制代入:AT_agc056_d
本文搬运自本人高中时期CSDN博客,若图片加载不出来,可到原文查看:https://blog.csdn.net/zhangtingxiqwq/article/details/135089890
https://vj.imken.moe/contest/600552#problem/G
考虑对题目进行转化
L≤Sa≤R
2L≤2Sa≤2R
2L+Sb≤Sa+S≤2R+Sb
2L−S≤Sa−Sb≤2R−S
2L≤S+Sa−Sb≤2R
L−R≤S−(L+R)+Sa−Sb≤R−L ,
设 x=S−(L+R)
∣x+Sa−Sb∣≤R−L
转化后得新题意:
给定 x ,先手加,后手减,求绝对值最小。
考虑 x=0 ,显然下界为 (a2−a1)+(a4−a3)+(a6−a5)+... ,从博弈论的角度来思考,下界是可以取到的。
但有了 x 的限制呢?如果直接加,显然是错误的,因为我们默认Alice取了 x ,但可能是Bob取了(?)。但我们可以搞到 a 里面。枚举一个 ai+=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");
|