sg

匿名 (未验证) 提交于 2019-12-02 23:52:01

https://scut.online/p/93
每次取走的石子是b的幂次。打表暴力。

#include <bits/stdc++.h> using namespace std; typedef long long ll;  const int MAXN=1000005; //f[i]:可改变i状态的方式 //SG[]:0~n的SG函数值 //S[]:为x后继状态的集合 vector<int> f[MAXN]; int SG[MAXN],S[MAXN]; void  getSG(int n){     for(int i = 1; i <= n; i++){         int l=f[i].size();         //后继状态 最多有l 种         for(int j=0;j<=l;j++){             S[j]=0;         }         for(auto vi:f[i]){             //vi:从i状态能取走的石子数             S[SG[i-vi]]=1;         }         for(int j=0;j<=l;j++){             if(!S[j]){                 SG[i] = j;                 break;             }         }         cout<<"SG["<<i<<"]="<<SG[i]<<endl;     }  }  int N=120;  void enque(int id){     ll cur=1,b=8;     while(id>=cur){         f[id].push_back(cur);         cur*=b;     } }  int main() { #ifdef Yinku     freopen("Yinku.in", "r", stdin); #endif // Yinku     for(int i=0;i<=N;i++){         enque(i);     }     getSG(N); }

来源: https://www.cnblogs.com/Yinku/p/11291810.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!