zoukankan      html  css  js  c++  java
  • 【BZOJ2940】条纹(博弈论)

    【BZOJ2940】条纹(博弈论)

    题面

    BZOJ
    神TM权限题。

    题解

    我们把题目看成取石子的话,题目就变成了这样:
    有一堆(m)个石头,每次可以取走(c,z,n)个,每次取完之后可以把当前这堆剩下的石头分成任意数量的两堆(可以为空),不能操作者输,判定胜负。
    那么这就是一个比较简单的(Multi-SG)了,直接预处理(SG)函数即可。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    #define ll long long
    #define MAX 1010
    inline int read()
    {
    	int x=0;bool t=false;char ch=getchar();
    	while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    	if(ch=='-')t=true,ch=getchar();
    	while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
    	return t?-x:x;
    }
    int c,z,n,m,SG[MAX];
    bool vis[MAX];
    int main()
    {
    	c=read(),z=read(),n=read();
    	for(int i=1;i<=1000;++i)
    	{
    		memset(vis,0,sizeof(vis));
    		if(i>=c)
    			for(int j=0;j<=i-c;++j)
    				vis[SG[j]^SG[i-c-j]]=true;
    		if(i>=z)
    			for(int j=0;j<=i-z;++j)
    				vis[SG[j]^SG[i-z-j]]=true;
    		if(i>=n)
    			for(int j=0;j<=i-n;++j)
    				vis[SG[j]^SG[i-n-j]]=true;
    		for(int j=0;;++j)if(!vis[j]){SG[i]=j;break;}
    	}
    	m=read();while(m--)puts(SG[read()]?"1":"2");
    	return 0;
    }
    
    
  • 相关阅读:
    bootstrap 在页面的引入使用
    flex布局/弹性盒子
    @keyframes css3动画
    css3 圆角,阴影,渐变...
    css3 的转换和过渡
    学习正则表达式
    页面联系我们加入地图map
    @font-face的使用
    React Native组件之ScrollView 和 StatusBar和TabBarIos
    React Native组件之Switch和Picker和Slide
  • 原文地址:https://www.cnblogs.com/cjyyb/p/9490277.html
Copyright © 2011-2022 走看看