BZOJ3577:玩手机 最大流+二维ST表优化
BZOJ3774:最优选择 网络流

BZOJ3609:[Heoi2014]人人尽说江南好 找规律

shinbokuow posted @ Feb 05, 2015 11:58:39 AM in BZOJ with tags 博弈论 找规律 , 1734 阅读

思路:

好歹我也是做过一些博弈论的题,结果毫无思路.

因为不能分解成子游戏,所以SG函数直接废.

反正一切线索全部都指向一条唯一的道路--找规律!!(也许是构造?但我太弱)

然后有一个指数级的暴力打表:

#include<cstdio>
#include<cstring>
#include<cctype>
#include<iostream>
#include<algorithm>
using namespace std;

int seq[31],lim;

bool Solve(){
	int num=0;register int i,j;
	for(i=1;i<=30;++i)num+=seq[i];
	if(num==1)return 0;
	int tseq[31];memcpy(tseq,seq,sizeof seq);
	for(i=1;i<=30;++i)for(j=i;j<=30;++j){
		memcpy(seq,tseq,sizeof tseq);
		if(i==j){
			if(seq[i]<2||2*i>lim)continue;
			seq[i]-=2,seq[2*i]++;
			if(!Solve())return 1;
		}
		else{
			if(!seq[i]||!seq[j]||i+j>lim)continue;
			--seq[i],--seq[j],++seq[i+j];
			if(!Solve())return 1;
		}
	}
	return 0;
}
int main(){
	register int i,j,k;
	for(i=1;i<=7;++i){
		for(j=1;j<=26;++j){
			memset(seq,0,sizeof seq),seq[1]=j;lim=i;
			if(Solve()==1)printf("lim=%d n=%d %d\n",i,j,j%i);
		}puts("");
	}
}

然后好像发现了什么.

然后就是AC程序.

#include<cstdio>
#include<cstring>
#include<cctype>
#include<iostream>
#include<algorithm>
using namespace std;
 
int main(){
    int T;scanf("%d",&T);int n,lim;
    while(T--){
        scanf("%d%d",&n,&lim);
        if(lim==1)puts("1");
        else if(n==1)puts("1");
        else if(n<=lim){
            if(n&1)puts("1");else puts("0");
        }
        else if(lim==2){
            if(n%4==2||n%4==3)puts("0");else puts("1");
        }
        else{
            if(lim&1){
                if(n%lim!=0&&(n%lim)%2==0)puts("0");else puts("1");
            }
            else{
                int t=n%lim;
                if(t==0){
                    if((n/lim)&1)puts("0");else puts("1");
                }
                else if(t&1){
                    if(n%(2*lim)==lim+t)puts("0");else puts("1");
                }
                else{
                    if(n%(2*lim)==t)puts("0");else puts("1");
                }
            }
        }
    }
    return 0;
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter