D. Circle Game(思维+对称博弈)

https://codeforces.com/problemset/problem/1451/D

 

题意翻译

在坐标轴上,有一个以 (0,0)为圆点,dd 为半径的圆。
现在 Ashish 和 Utkarsh 玩游戏,Ashish 是先手。
在 (0,0) 处有一颗棋子,两人轮流将棋子向上或向右移动 kk 个单位,棋子不能移出圆,谁无法移动谁输。


思路:

两条定理

  1. 必败状态的所有后继状态都是必胜状态

  2. 必胜状态的至少一个后继状态是必败状态

假设(x,y)是必败点,那么(x+1,y),(x,y+1)是必胜点。

根据本题,(x+1,y+1)胜负隔一个k转化,是必败点。再下去可以发现其实必胜点和必败点是连成一条线的。

(https://www.luogu.com.cn/user/59388的图)

【蓝色表示必败点,红色表示必胜点】

那么我们方便的判断直接判y=x这条线。

那么y=x这条怎么知道是在必胜和必败呢?

我们先假设当前y=x是在必胜。那么人工模拟一下发现实际上这个y=x的最后一个红色的是先手输的,所以实际上图是反的。

那么获得了y=x是必败点的图。

 基于此,我们刚才说到了最后一个y=x是蓝色点,如果这个圆的半径稍微扩大一点,也就是刚好把最后一个y=x的蓝色点上面一个(对称的右边一个状态是一样的)包括进来,那么A到了y=x的最后一个蓝色,还有上右可以走一步,一走发现这个时候把决策时刻留给了B。因此可以发现如果y=x的最远一个点上面一个点/右边一个点也在圆内,A获胜,否则B获胜。

求的时候就y=x与圆方程联立求得最远点,/k后表示k步实际上能达到的。然后看其旁边一个点是否在圆内。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值