模板 - 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包的下载
官方下载地址: https://dev.mysql.com/downloads/mysql/5.5.html#downloads mysql的下载界面 二进制的包 通用的RPM包 源码包
- BZOJ 4597: [Shoi2016]随机序列 线段树 + 思维
Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者 减号或者乘号.那么一共有 3^(n-1) 种可能的表 ...
- C++ - C++简介
一.C与C++ 一般来说,计算机要处理两个概念--算法和数据.C在面世时是过程性的语言,过程性的语言指的是程序的过程较比其他语言,会更加的有序可读(清晰性和可读性).因为它把程序分解成各个分支,并执行 ...
- JavaWeb学习篇之----浏览器缓存问题详解
摘要 1.Etag和Expires中Client 端Http Request Header及Server端Http Reponse Header工作原理. 2.静态下Apache.Lighttpd和N ...
- 技术干货:Python解析CSV
1. 什么是CSV CSV(Commma-Separated Value)是都好分隔符,其文件以纯文本形式存储表格数据(数字和文本). 案例: 2. 为什么要使用CSV 与专有的二进制文件格式截然不同 ...
- Spring Data Jpa (五)@Entity实例里面常用注解详解
详细介绍javax.persistence下面的Entity中常用的注解. 虽然Spring Data JPA已经帮我们对数据的操作封装得很好了,约定大于配置思想,帮我们默认了很多东西.JPA(Jav ...
- [POJ2942]:Knights of the Round Table(塔尖+二分图染色法)
题目传送门 题目描述 亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求: .相互憎恨的两个骑士不能坐在直接相邻的 ...
- Oracle开发:normal ,sysdba,sysoper区别
Oracle将用户分成两类:[system]和[sys] [system]用户只能用normal身份登陆em.(可以看成公司的普通成员) [sys]用户具有“SYSDBA”(可以看成公司的CEO)或者 ...
- SpringMVC - <mvc:default-servlet-handler/> 导致 Controller失效
原文地址:http://blog.csdn.net/j080624/article/details/66969987
- SpringBoot整合Shiro实现权限控制,验证码
本文介绍 SpringBoot 整合 shiro,相对于 Spring Security 而言,shiro 更加简单,没有那么复杂. 目前我的需求是一个博客系统,有用户和管理员两种角色.一个用户可能有 ...