zoukankan      html  css  js  c++  java
  • POJ 3537

    利用后继节点的SG值求出当前的SG值。

    在当前任意一个BLANK插入一个x后,分成两段,于是,看成两段的NIM,异或和,按SG的定义求出当前的SG值即可。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 const int MAX=2010;
     7 int sg[MAX];
     8 bool save[MAX];
     9 
    10 int get(int len){
    11     for(int i=0;i<MAX;i++)
    12     if(!save[i]) return i;
    13 }
    14 
    15 int main(){
    16     int mid; int len,a,b,ans;
    17     sg[0]=0;sg[1]=sg[2]=sg[3]=1;
    18     for(int i=4;i<=2000;i++){
    19             memset(save,false,sizeof(save));
    20             len=0;
    21             if(i&1) mid=i/2+1;
    22             else mid=i/2;
    23             for(int k=1;k<=mid;k++){
    24                     a=k-3; b=i-k-2;
    25                     if(a<0) a=0;
    26                     if(b<0) b=0;
    27                     ans=sg[a]^sg[b];
    28                     save[ans]=true;
    29             }
    30             sg[i]=get(len);
    31     }
    32  //   for(int i=1;i<=15;i++)
    33  //   printf("%d ",sg[i]);
    34     int n;
    35     while(scanf("%d",&n)!=EOF){
    36     if(sg[n]) printf("1
    ");
    37     else printf("2
    ");
    38     }
    39     return 0;
    40 }
    View Code
  • 相关阅读:
    [每日短篇] 1C
    项目Alpha冲刺 Day12
    项目Alpha冲刺 Day12
    [转载]MVC中单用户登录
    GitLab
    Git 版本控制
    Jenkins持续集成
    Jenkins安装
    Docker 网络基础原理
    java中内存的使用
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/3776868.html
Copyright © 2011-2022 走看看