2021 牛客多校第一场 A.Alice and Bob

赛场暴力打表过的, 补std和证明. 题目

题意

两堆石子, 个数为 n , m n, m n,m, 每次从一堆拿 k ( k > 0 ) k(k>0) k(k>0)个, 从另一堆拿 s × k ( s ≥ 0 ) s\times k(s \ge 0) s×k(s0)个, 不能操作输. T T T组询问, 问先后手必胜.

1 ≤ n , m ≤ 5 × 1 0 3 , 1 ≤ T ≤ 1 0 4 1 \le n, m \le 5 \times 10^3, 1 \le T \le 10^4 1n,m5×103,1T104

题解

打表会发现(确实是打了表才发现的), 一堆石子个数为 i i i, 最多只有一个 j j j, 使得两堆石子 i , j i, j i,j 必败. 下面证明. 假设 ( i , j 1 ) , ( i , j 2 ) (i, j_1), (i, j_2) (i,j1),(i,j2) 必败, 不妨设 i ≤ j 1 < j 2 i \le j_1 < j_2 ij1<j2, 状态 ( i , j 2 ) (i, j_2) (i,j2) 可以转移到必败态 ( i , j 1 ) (i, j_1) (i,j1), 即第二堆拿 j 2 − j 1 j_2 - j_1 j2j1 个, 第一堆不拿( s = 0 s=0 s=0). 这样 ( i , j 2 ) (i, j_2) (i,j2) 是必胜态, 和必败态矛盾.

然后就可以去筛了. ( i , j ) (i, j) (i,j) 必败, 枚举 k , s k, s k,s, ( i + k , j + s k ) , ( i + s k , j + k ) (i+k, j+sk), (i+sk, j+k) (i+k,j+sk),(i+sk,j+k) 必败. 必败态 O ( n ) O(n) O(n) 个, 枚举 k k k O ( n ) O(n) O(n), 枚举 s s s O ( log ⁡ n ) O(\log n) O(logn), 总复杂度 O ( n 2 log ⁡ n ) O(n^2 \log n) O(n2logn). 只需要统计 i ≤ j i \le j ij 的, 可进一步优化(否则牛客上过不去笑死, 本地跑500ms以内, 本地这样优化200ms以内)

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值