Codeforces1194D. 1-2-K Game sg函数打表

https://codeforces.com/contest/1194/problem/D
假设k==3

sg[0]=0,
sg[1]=mex{sg[0]}=1,
sg[2]=mex{sg[0],sg[1]}=2,
sg[3]=mex{sg[0],sg[1],sg[2]}=3,
sg[4]=mex{sg[1],sg[2],sg[3]}=0,
sg[5]=mex{sg[2],sg[3],sg[4]}=1,
sg[6]=mex{sg[3],sg[4],sg[5]}=2,
sg[7]=mex{sg[4],sg[5],sg[6]}=3,
sg[8]=mex{sg[5],sg[6],sg[7]}=0.

0,1,2,3循环 策略是先手是4的倍数必败

假设k==4

sg[0]=0,
sg[1]=mex{sg[0]}=1,
sg[2]=mex{sg[0],sg[1]}=2,
sg[3]=mex{sg[1],sg[2]}=0,
sg[4]=mex{sg[0],sg[2],sg[3]}=1,
sg[5]=mex{sg[1],sg[3],sg[4]}=2,
sg[6]=mex{sg[2],sg[4],sg[5]}=0,
sg[7]=mex{sg[3],sg[5],sg[6]}=1,
sg[8]=mex{sg[4],sg[6],sg[7]}=2.

0,1,2循环 策略是先手是3的倍数必败
在这里插入图片描述

int q,n,k,ans;
ll a[maxn];

int main()
{
/*	int vis[25];
	memset(vis,0,sizeof vis);
	for(int i = 3 ; i < 20 ; i++) {
		cout<<"i: "<<i<<endl;
		memset(vis,0,sizeof(vis));
		for(int j = 0; j < 20 ;j++) {
			if((j-1>=0 && !vis[j-1]) || (j-2>=0 && !vis[j-2]) ||(j-i>=0&& !vis[j-i])){
				vis[j] = 1;
			}
			cout<<vis[j]<<' ';
		}
		cout<<endl;
	}*/
	int t;
	cin>>t;
	while(t--){
		cin>>n>>k;

		bool BobWin=true;
            if(k%3==0){	//k=3  循环节=k+1 
                n%=(k+1);//余数0-k 
                if(n%3)//第一个 011 1 011 1 01
                    BobWin=false;
                if(n==k)//第k+1个 
                    BobWin=false;
            }
            else{//循环节=3 011 011
                if(n%3)
                    BobWin=false;
            }

            puts(BobWin?"Bob":"Alice");
    }
	return 0;
}
	int t;
	cin>>t;
	while(t--){
		cin>>n>>k;
		if(k%3==0){
			int x=(n+1)%(k+1);	//一轮内 余数0-k 
			if(x%3==1)	//011 1 011 1 01
				cout<<"Bob"<<endl;	//n=4 n+1=5 k=3 k+1=4 余1 0111 0 
			else
				cout<<"Alice"<<endl;
		}
		else{
			if((n+1)%3==1)	//011 011 为0先手必败 
				cout<<"Bob"<<endl;
			else
				cout<<"Alice"<<endl; 
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值