模板 - SG函数
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://scut.online/p/42
每次有1或2两种取法,直接求sg然后异或一起?鹏哥有个记忆化搜索的写法感觉更巧妙一些。
#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){
if(id>=1)
f[id].push_back(1);
if(id>=2)
f[id].push_back(2);
}
*/
int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
/*for(int i=0;i<=N;i++)
enque(i);
getSG(N);*/
int T;
scanf("%d",&T);
int n,m;
while(T--){
scanf("%d%d",&n,&m);
int sg=(n%3)^(m%3);
puts(sg?"Naive is excited.":"Excited is naive.");
}
}
模板 - SG函数的更多相关文章
- hdu1536&&hdu3023 SG函数模板及其运用
S-Nim Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status ...
- SG函数模板(转)
ps:sg[i]为0表示i节点先手必败. 首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数.例如mex{0,1,2,4}=3.me ...
- 博弈的SG函数理解及模板
首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数.例如mex{0,1,2,4}=3.mex{2,3,5}=0.mex{}=0. 对 ...
- hdu 1536 SG函数模板题
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 算法笔记--sg函数详解及其模板
算法笔记 参考资料:https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html sg函数大神详解:http://blog.csdn.net/l ...
- 【非原创】sg函数模板
学习博客:戳这里 解题模型: 1.把原游戏分解成多个独立的子游戏,则原游戏的SG函数值是它的所有子游戏的SG函数值的异或. 即sg(G)=sg(G1)^sg(G2)^...^sg(Gn) ...
- Light OJ 1199:Partitioning Game(SG函数模板)
Alice and Bob are playing a strange game. The rules of the game are: 1. Initially there are n p ...
- hdu 1809 求SG函数
A New Tetris Game(2) Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- POJ 2960 S-Nim 博弈论 sg函数
http://poj.org/problem?id=2960 sg函数几乎是模板题. 调试代码的最大障碍仍然是手残在循环里打错变量名,是时候换个hydra产的机械臂了[超想要.jpg] #includ ...
随机推荐
- Mysql基本原理和概念
一.引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问题.通 ...
- UVa 725 Division (枚举)
题意 : 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij = n的表达式,其中a-j恰好为数字0-9的一个排列(可以有前导0),2≤n≤79. 分析 : 最暴力的方法莫过于采用数组存 ...
- VTK 编译过程中出现的hdf5长度(I64)错误解决办法
最近在使用vtk和cuda做大规模图像处理方面的问题研究,在编译vtk的过程中发现第三方库hdf5不能够解决I64长度的探测识别问题.为了节约大家的时间,现在把我经过实践得到的解决方案共享出来,这里要 ...
- xwiki安装部署
环境介绍 http://aiushtha-mybook.stor.sinaapp.com/xwiki/xwiki%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9 ...
- python相关遗漏知识点补充
python中的相关帮助命令 假设s是一个字符串, 那么dir(s)可以列出字符串对象的所有属性(方法也是函数属性),其中有下划线的部分与类重 载有关,用来表示python实现细节,没有下划线的属性是 ...
- Mac ssh key生成
转载https://blog.csdn.net/wangjunling888/article/details/51115659 1. 查看秘钥是否存在 打开终端查看是否已经存在SSH密钥:cd ~/. ...
- $_SERVER 中HTTP_HOST 和 SERVER_NAME
本来打算获取当前页面的url的 拼接时发现 $_SERVER['SERVER_NAME'] 并不是当前的url链接 打印整个$_SERVER 发现 [SERVER_NAME] => lvs ...
- 使用指定MTU到特定IP
ping指令使用指定MTU到特定IP 命令如下 45.58.185.18 这里MTU为1300
- C#单元测试Nunit小结
1. 下载和安装Nunit工具: NUnit是一款堪与JUnit齐名的开源的回归测试框架,供.net开发人员做单元测试之用,可以从www.nunit.org网站上免费获得,然后在系统中安装: 2. 在 ...
- redis4支持内存碎片清理功能使用
最近看到redis4支持内存碎片清理了, 之前一直期待有这么一个功能, 因为之前遇到内存碎片的解决办法就是重启, 现在终于有了优雅的解决方案.\^o^/, 这个功能其实oranagra 在2017年1 ...