SY 的游戏(博弈论,二分)

题意简述

SY 非常聪明,也爱玩游戏。

这次他和 ZXY 玩游戏,游戏在一个序列上进行。SY 为先手,每次需要轮流在序列开头或结尾拿走一个数,若一个人拿走一个数后整个序列变得单调(单调不下降或单调不上升)的话,此人获胜,游戏结束。

SY 和 ZXY 的游戏进行 M 次,每次在一个长为 N 的序列 a a a [ l i , r i ] [l_i,r_i] [li,ri] 区间进行,每次游戏独立。SY 和 ZXY 都是绝顶聪明的人,因此都会按照最优策略玩。若某次游戏 SY 赢了,他会发出属于 HandInDevil 的笑声,你需要输出 se,如果他输了,他会哭得很伤心,因为输给了一个 M e i E r M_{^{ei}}E_{^{r}} MeiEr!此时你需要输出 liulei

3 ≤ N , M ≤ 1 0 6 , 0 ≤ a i ≤ 1 0 9 , 1 ≤ l i ≤ r i ≤ n 3 ≤ N, M ≤ 10^6, 0 ≤ a_i ≤ 10^9, 1 ≤ l_i ≤ r_i ≤ n 3N,M106,0ai109,1lirin

推理题解

令我们总区间 [ 1 , N ] [1,N] [1,N] 为坐标 ( 0 , 0 ) (0, 0) (0,0)。每次删掉开头,我们认为是从 ( x , y ) (x, y) (x,y) 走到 ( x + 1 , y ) (x + 1, y) (x+1,y) ,删掉尾部是从 ( x , y ) (x, y) (x,y) 走到 ( x , y + 1 ) (x, y + 1) (x,y+1)

也就是我们在一个二维平面上,从 ( l i − 1 , N − r i ) (l_i-1,N-r_i) (li1,Nri) 开始每次向上向右走,直到走到不能走的位置 (满足单调了)。我们要求的就是这个位置是先手必胜还是先手必败。

接下来有两个推论:

  1. 如果 ( x + 1 , y + 1 ) (x + 1, y + 1) (x+1,y+1) 是先手必败,那么 ( x , y ) (x, y) (x,y) 一定是先手必败。
  2. 如果 ( x + 1 , y + 1 ) , ( x + 2 , y + 2 ) (x + 1, y + 1),(x + 2, y + 2) (x+1,y+1),(x+2,y+2) 都是先手必胜,那么 (x, y) 一定也是先手必胜。

我们定义 1 为先手必胜,0 为必败,那么某个位置 ( x , y ) (x,y) (x,y) (并非单调区间)的胜负状态 f x , y f_{x,y} fx,y 就有这样的式子成立: f x , y = ( f x + 1 , y    a n d    f x , y + 1 )    x o r    1 f_{x,y}=(f_{x+1,y}\; and\;f_{x,y+1})\; xor\;1 fx,y=(fx+1,yandfx,y+1)xor1,我们根据这个式子证明推论。

第一条推论很好证明,若 f x + 1 , y + 1 f_{x+1,y+1} fx+1,y+1 是 0,那么 f x + 1 , y f_{x+1,y} fx+1,y f x , y + 1 f_{x,y+1} fx,y+1 一定都是 1,进而 f x , y = 0 f_{x,y}=0 fx,y=0 得证了。

第二条推论我们可以用反证法,若 f x , y = 0 f_{x,y}=0 fx,y=0 ,说明 f x + 1 , y = f x , y + 1 = 1 f_{x+1,y}=f_{x,y+1}=1 fx+1,y=fx,y+1=1

-	-	-	-
-	-	1	-
1?	1	-	-
0?	1?	-	-

而由于 f x + 1 , y + 1 f_{x+1,y+1} fx+1,y+1 等于 1,那么 f x + 1 , y = f x , y + 1 = 1 f_{x+1,y}=f_{x,y+1}=1 fx+1,y=fx,y+1=1 就只可能是根据 f x + 2 , y = f x , y + 2 = 0 f_{x+2,y}=f_{x,y+2}=0 fx+2,y=fx,y+2=0 推过来的,

-	-	-	-
0?	-	1	-
1?	1	-	-
0?	1?	0?	-

一个 0 意味着它上方和右方都是 1,那么 f x + 2 , y + 1 = f x + 1 , y + 2 = 1 f_{x+2,y+1}=f_{x+1,y+2}=1 fx+2,y+1=fx+1,y+2=1 ,但是这和 f x + 1 , y + 1 = 1 f_{x+1,y+1}=1 fx+1,y+1=1 矛盾,因为一个 1 意味着它上方和右方至少有一个 0 。

1?	-	-	-
0?	1?	1	-
1?	1×	1?	-
0?	1?	0?	1?

于是 f x , y = 0 f_{x,y}=0 fx,y=0 不成立, f x , y = 1 f_{x,y}=1 fx,y=1 得证。

那么我们要求一个位置的 f x , y f_{x,y} fx,y 值,应该怎么办呢?我们可以倒推回去。因为 f x + 1 , y + 1 f_{x+1,y+1} fx+1,y+1 f x + 2 , y + 2 f_{x+2,y+2} fx+2,y+2 可以决定 f x , y f_{x,y} fx,y ,所以我们考虑它的右上方最边上的两个 f f f 值,它们就是 f x , y f_{x,y} fx,y 的来源!

0	0	0	0	0	0	0	0	0	0	0	0
-	-	-	-	-	-	1	-	-	-	-	0
-	-	-	-	-	?	-	-	-	-	-	0
-	-	-	-	...	-	-	-	-	-	-	0
-	-	-	...	-	-	-	-	-	-	-	0
-	-	...	-	-	-	-	-	-	-	-	0
-	...	-	-	-	-	-	-	-	-	-	0
? <--	-	-	-	-	-	-	-	-	-	0

我们知道,紧挨着“单调区间” f f f 线的值都是 1,然后就可以从右边推过来,计算右上方倒数第二个的值,

0	0	0	0	0	0	0	0	0	0	0	0
1	1	1	1	1	1	1	1	1	1	1	0
1	0	1	0	1	0	1	0	1	0	1	0
-	-	-	-	...	-	-	-	-	-	1	0
-	-	-	...	-	-	-	-	-	-	1	0
-	-	...	-	-	-	-	-	-	-	1	0
-	...	-	-	-	-	-	-	-	-	1	0
? <--	-	-	-	-	-	-	-	-	1	0

我们会发现,只跟到右边“墙壁”的距离奇偶性有关!

我们可以把每个点向右的最长单调区间求出来,然后加到这个坐标系中(两段“墙壁”),询问的时候二分找墙壁,然后求奇偶性就完了。

CODE(無)

因为无法评测,不知道结果,所以代码公布就不太好了😟

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值