bzoj1457: 棋盘游戏 SG函数 Nim

Code:

#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 1003
#define r 99
int n, x[maxn],y[maxn],SG[102][102],tag[6000000];
bool check(int xi,int yi){
    if(xi==0||yi==0||xi==yi) return true;
    return false;
}
void get(int xi,int yi){
    int id=yi*99+xi;
    for(int i=xi-1;i>=0;--i) if(!check(i,yi))tag[SG[i][yi]]=id;
    for(int i=yi-1;i>=0;--i) if(!check(xi,i))tag[SG[xi][i]]=id;
    for(int i=xi-1,j=yi-1;i>=0&&j>=0;--i,--j) if(!check(i,j))tag[SG[i][j]]=id;
    for(int i=0;;++i) if(tag[i]!=id) { SG[xi][yi]=i; break;}
}
int main(){
   // freopen("input.in","r",stdin);
    for(int i=0;i<=r;++i)               //y-cordinate
        for(int j=0;j<=r;++j)           //x-cordinate
            if(!check(j,i)) get(j,i);           
    int T;
    scanf("%d",&T);
    while(T--){
        int n,ans=0,flag=0;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            scanf("%d%d",&x[i],&y[i]);
            if(check(x[i],y[i])) flag=1;
            ans^=SG[x[i]][y[i]];
        }
        if(flag || ans) printf("^o^\n");
        else printf("T_T\n");
    }
    return 0;
}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值