SG函数的应用

首先每一组都是独立的,所以我们可以求出每一组的SG值异或出来。

那么怎么求每一组的SG值呢,网上的题解都是打表找规律,但其实这个规律是可以证明的

先看规律:

x为奇数,y为奇数:SG=0

x为偶数,y为偶数:SG=SG(x/2 , y/2)+1

x为奇数,y为偶数:SG=SG((x+1)/2 , y/2)+1

x为偶数,y为奇数:SG=SG(x/2 , (y+1)/2)+1

即寻找如下最小的k使得 $ i - 1 < 2 ^ k (mod 2 ^ (k + 1))$

证明如下:

引理一:

当去掉一堆后,剩下的一堆为奇数时,这些后继的的 mex 值为 0,

用数学归纳法证明:

  1. 1不合法,最小合法的奇数为 3,当该数为 3 时,显然成立。
  2. 假设小于奇数n的奇数均满足此性质,因为一个奇数 n 一定能切仅能分解成一个奇数和一个偶数的后继,这个后继因为其中有一个奇数,所以该后继的后继一定有 0,所以这个后继的 SG 值一定大于 0,所以n的 SG 值一定为 0

由引理一可以得出当剩下的一堆为偶数时,该状态的 SG 值一定不为 0

当两个数均为奇数时,SG 为 0,规律一得证

当两个数一奇一偶时, SG 一定不为 0 ,且只有剩下偶数堆时对 SG 值才有贡献。

引理二:

当去掉一堆后,剩下的一堆为偶数 n 时,这些后继的 mex 值为 SG(n/2) + 1 , 2 的后继的 mex 为 1

数学归纳法证明:

一个偶数 n 一定能分解成两个奇数,所以后继中一定有 0 (引理一)

一个大于 2 的偶数 n 一定能分解成两个偶数,且分解出的偶数的集合为{2, 4, ……, n - 2}

。。。翻车了

    #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int SG(int n,int m)
{
if(n&1&&m&1)return 0;
if(!(n&1)&&!(m&1))return SG(n>>1,m>>1)+1;
if(!(n&1)&&m&1)return SG(n>>1,(m+1)>>1)+1;
if(n&1&&!(m&1))return SG((n+1)>>1,m>>1)+1;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,ans=0;
scanf("%d",&n);
for(int i=1;i<=(n>>1);i++)
{
int x,y;
scanf("%d%d",&x,&y);
ans^=SG(x,y);
}
if(ans)puts("YES");
else puts("NO");
}
}

洛谷 [P2148] E&G的更多相关文章

  1. 洛谷P2148 [SDOI2009]E&D(博弈论)

    洛谷题目传送门 先安利蒟蒻仍在施工的博弈论总结 首先根据题目,石子被两两分组了,于是根据SG定理,我们只要求出每一组的SG值再全部异或起来就好啦. 把每一对数看成一个ICG,首先,我们尝试构造游戏的状 ...

  2. 洛谷P2148 E&D——打表

    题目:https://www.luogu.org/problemnew/show/P2148 先打表找个规律: #include<iostream> #include<cstdio& ...

  3. 洛谷P2115 Sabotage G 题解

    题目 [USACO14MAR]Sabotage G 题解 本蒟蒻又来了,这道题可以用二分答案来解决.我们可以设答案最小平均产奶量为 \(x \ (x \in[1,10000])\) .然后二分搜索 \ ...

  4. 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)

    题目 :Bovine Genomics G奶牛基因组 传送门: 洛谷P3667 题目描述 Farmer John owns NN cows with spots and NN cows without ...

  5. 不失一般性和快捷性地判定决策单调(洛谷P1912 [NOI2009]诗人小G)(动态规划,决策单调性,单调队列)

    洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要 ...

  6. BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】

    题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...

  7. 【题解】洛谷P3119 Grass Cownoisseur G

    题面:洛谷P3119 Grass Cownoisseur G 本人最近在熟悉Tarjan的题,刷了几道蓝题后,我飘了 趾高气扬地点开这道紫题,我一瞅: 哎呦!这不是分层图吗? 突然就更飘了~~~ 用时 ...

  8. 洛谷 P3659 [USACO17FEB]Why Did the Cow Cross the Road I G

    //神题目(题目一开始就理解错了)... 题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's far ...

  9. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

随机推荐

  1. 使用JavaScript调用手机平台上的原生API

    我之前曾经写过一篇文章使用Cordova将您的前端JavaScript应用打包成手机原生应用,介绍了如何使用Cordova框架将您的用JavaScript和HTML开发的前端应用打包成某个手机平台(比 ...

  2. 字符串赋值方式理解 sizeof 和strlen的一些区别

    #include<stdio.h>#include<string.h>  int main(){ int a,i=0; char ch[10000]; while(scanf( ...

  3. python基础一 day14 生成器函数进阶

    def generator(): print(123) content = yield 1 print('=======',content) print(456) arg = yield 2 '''' ...

  4. 【图文并茂】DEV配置NTL库

    一开始根据陈老师的博客:再说如何在DEV C++中搭建NTL库 后来发现自己虽然跟着一步一步来做,还是做错了很多回. 究竟怎么一回事呢?后来我发现一个致命的错误很容易忽视,所以我就重新写一篇博客. 来 ...

  5. OmniFocus

    褪墨・时间管理 “把所有事情都从你的脑袋里弄出来.在事情出现就做好相关行动的一系列决定,而不是在事情爆发的时候.以合适的类别组织好你的项目的各种提醒以及下一步行动.保持你的系统更新和完整,及时进行回顾 ...

  6. 请大神看看10.10Beta1的AppleRTC怎么破?原版会导致BIOS重置!

    看起来 跟10.9一样 sudo perl -pi -e 's|\x75\x2e\x0f\xb6|\xeb\x2e\x0f\xb6|' /System/Library/Extensions/Apple ...

  7. 一次下载多个文件的解决思路-JS

    一次下载多个文件的解决思路(iframe) - Eric 真实经历 最近开发项目需要做文件下载,想想挺简单的,之前也做过,后台提供下载接口,前端使用window.location.href就行了呗.不 ...

  8. linux文件权限更改命令chmod及数字权限

    chmod -change file mode bits :更改文件权限 chmod是用来改变文件或者目录权限的命令,但只有文件的属主和超级用户(root)才有这种权限. 更改文件权限的2种方式: 一 ...

  9. 面向对象之多态,property

    多态: 同一种事物有多种状态 多态性: 在不考虑对象具体类型的前提下直接调用对象下的方法 静态多态性和动态多态性 静态多态性:都可以进行+操作 动态多态性:不考虑对象具体类型调用方法 多态的好处: ① ...

  10. Template--模板

    模板引擎的支持 配置 模板引擎配置为TEMPLATES设置.这是一个配置列表,每个引擎一个,默认值为空.这是settings.py生成的,通过startproject命令定义了一个更有用的值: TEM ...