码迷,mamicode.com
首页 > 其他好文 > 详细

【cf 1194 D】1-2-K Game

时间:2019-10-13 12:40:39      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:har   pac   click   inline   getchar   return   不能   span   题解   

(当时让这道sb题卡住了,我比sb还sb)

题意:

n个东西,两个人轮流取,每次可以取走1个,2个或k个,不能取的人输,求谁必胜。

$0\leq n \leq 10^{9},3\leq k \leq 10^{9}$

 

题解:

假如没有这个k,显然如果n是3的倍数则后手赢,否则先手赢。

操作方法就是某一个人永远保证$n\equiv 0(mod 3)$

那么这个题的思考方式就是:

  • 若$k\equiv 0(mod 3)$,推一下SG函数,容易发现它有一个长度为(k+1)的循环节,于是mod(k+1)后按SG值判断即可。
  • 否则,这个k的作用跟1或2一样,取不取k不影响必胜情况,按原来的方法判断即可。

 

代码:

技术图片
#include<bits/stdc++.h>
#define maxn 100005
#define maxm 500005
#define inf 0x7fffffff
#define ll long long
 
using namespace std;
int N,K;
 
inline int read(){
    int x=0,f=1; char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c==-) f=-1;
    for(;isdigit(c);c=getchar()) x=x*10+c-0;
    return x*f;
}
 
int main(){
    int T=read();
    while(T--){
        N=read(),K=read();
        if(K%3==0) N%=(K+1);
        if((N+1)%3==1 && N!=K) printf("Bob\n");
        else printf("Alice\n");
    }
    return 0;
}
1-2-K Game

 

【cf 1194 D】1-2-K Game

标签:har   pac   click   inline   getchar   return   不能   span   题解   

原文地址:https://www.cnblogs.com/YSFAC/p/11665510.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!