当前位置: 首页 > news >正文

模板 - 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.");
    }
}

转载于:https://www.cnblogs.com/Yinku/p/11291810.html

相关文章:

  • 浪潮之巅第三章 — “水果”公司的复兴 (乔布斯和苹果公司)
  • SCUT - 11 - 被钦定的选手 - 质因数分解
  • notify官方详解
  • heartbeat与lvs和realserver的结合
  • Windows Phone 7 Silverlight开发试玩
  • 我命由我不由天
  • git用法记录
  • 模板 - 日期类
  • POJ数学题目
  • SCUT - 142 - 第n个素数
  • 敏捷开发般若敏捷系列之二:什么是敏捷(上)(无住,不住于法,破法执)...
  • C#打包应用程序
  • SCUT - 37 - 手速帝CZK - 分块
  • HDU 1166 敌兵布阵
  • babel
  • 深入了解以太坊
  • Angular数据绑定机制
  • C++类的相互关联
  • DataBase in Android
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTTP中的ETag在移动客户端的应用
  • Java多线程(4):使用线程池执行定时任务
  • k8s如何管理Pod
  • RxJS: 简单入门
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 复习Javascript专题(四):js中的深浅拷贝
  • 基于axios的vue插件,让http请求更简单
  • 如何解决微信端直接跳WAP端
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​2021半年盘点,不想你错过的重磅新书
  • ​520就是要宠粉,你的心头书我买单
  • ​iOS安全加固方法及实现
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • (03)光刻——半导体电路的绘制
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (七)Knockout 创建自定义绑定
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (四)Linux Shell编程——输入输出重定向
  • (一)基于IDEA的JAVA基础12
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • .htaccess配置常用技巧
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [20180224]expdp query 写法问题.txt
  • [51nod1610]路径计数
  • [Android Studio 权威教程]断点调试和高级调试
  • [BJDCTF2020]The mystery of ip1
  • [C/C++]数据结构 栈和队列()
  • [c]统计数字