Nim积的一种???的写法
Nim积总不能一直打四次暴力吧!
用SG定理等东西,可以证明 \((N, \oplus, \otimes)\) 构成一个域。(证明很难,我不会)
其中 \(\oplus\) 为异或, \(x \otimes y = \mathop{\textrm{mex}}_{1 \leq i < x, 1 \leq j < y} \left\{ (i \otimes y) \oplus (x \otimes j) \oplus (i \otimes j)\right\}\),即暴力对子状态计算。
然后还有优美的性质,能使计算 \(\otimes\) 做到 \(O(\textrm{poly} (\log))\):
对于一个费马数 \(M = 2^{2^a}\),对于一个 \(y\),有以下两个性质:
- \(M \otimes y = M \times y ~~~ (M > y)\)
- \(M \otimes M = M \oplus \frac{M}{2}\)
有俩 \(\log\) 的做法广为流传。但是因为不太常用,我人也懒,所以搞了一个不知是三个还是两个 \(\log\) 的东西(反正贼好写):
int normalnimproduct(int x, int y) ;
int nimproduct(int x, int y) {
if (x == 1) return y;
if (x < y) return normalnimproduct(y, x);
int M = 1 << (1 << (int) std::log2((int) std::log2(x)));
int d1 = nimproduct(x / M, y / M);
int d2 = nimproduct(x / M, y % M);
return (M * (d1 ^ d2)) ^ nimproduct(M >> 1, d1);
}
int normalnimproduct(int x, int y) {
int res = 0;
for (; x; x &= x - 1) res ^= nimproduct(x & -x, y);
return res;
}
其中 nimproduct 的 \(x\) 是二的幂。貌似存幂会跑得快一点。
根据 09论文 里,nimproduct 正确性证明如下:
我们保证 \(x \geq y\),记 \(x = PM, y = SM + T\),其中 \(M\) 是最大的满足 \(M < x\) 且为费马数的数。
显然有 \(P, S, T < M\)。然后有:
& (P \times M) \otimes (S \times M + T) \\
= & (P \otimes M) \otimes ((S \otimes M) \oplus T) \\
= & (M \otimes M \otimes P \otimes S) \oplus (M \otimes P \otimes T) \\
= & ((M \oplus \frac{M}{2}) \otimes P \otimes S) \oplus (M \otimes P \otimes T) \\
= & (M \otimes ((P \otimes S) \oplus (P \otimes T))) \oplus (\frac{M}{2} \otimes (P \otimes S)) \\
= & (M \times ((P \otimes S) \oplus (P \otimes T))) \oplus (\frac{M}{2} \otimes (P \otimes S))
\end{align*}
\]
记 \(d1 = P \otimes S, d2 = P \otimes T\),就有
\]
normalnimproduct 的正确性因为结合律显然。
然后这样写,就偷懒成功了(好记好写)。
实际上论文里另一个函数推法类似。反正如果考试遇到连预处理一个范围以内这种方法都跑不过的话,那就慢慢推常见做法吧。
Nim积的一种???的写法的更多相关文章
- Nim函数调用的几种形
Nim函数调用的几种形式 Nim 转载条件:如果你需要转载本文,你需要做到完整转载本文所有的内容,不得删改文内的作者名字与链接.否则拒绝转载. 关于nim的例行介绍: Nim 是一门静态编译型的系统级 ...
- Nim积解法小结
由于某毒瘤出题人 redbag 不得不学习一下这个史诗毒瘤算法. 本文参考了 Owaski 的 GameTheory 的课件. 定义 我们对于一些二维 \(\mathrm{Nim}\) 游戏(好像更高 ...
- Nim函数调用的几种形式
Nim函数调用的几种形式 Nim 转载条件:如果你需要转载本文,你需要做到完整转载本文所有的内容,不得删改文内的作者名字与链接.否则拒绝转载. 关于nim的例行介绍: Nim 是一门静态编译型的系统级 ...
- SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法
本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...
- 查询分页的几种Sql写法
查询分页的几种Sql写法 摘自:http://www.cnblogs.com/zcttxs/archive/2012/04/01/2429151.html 1.创建测试环境,(插入100万条数据大概耗 ...
- 转--Android按钮单击事件的四种常用写法总结
这篇文章主要介绍了Android按钮单击事件的四种常用写法总结,比较了常见的四种写法的优劣,有不错的参考借鉴价值,需要的朋友可以参考下 很多学习Android程序设计的人都会发现每个人对代码的 ...
- 代码片段--Makefile之大型工程项目子目录Makefile的一种通用写法
转载:http://blog.csdn.net/mo_hui123456/article/details/8929615 管理Linux环境下的C/C++大型项目,如果有一个智能的Build Syst ...
- WebApi的一种集成测试写法(in-memory)
WebApi的一种集成测试写法(in-memory) 大家是如何对webApi写测试的呢? 1.利用Fiddler直接做请求,观察response的内容. 2.利用Httpclient做请求,断言 ...
- HDU 3404&POJ 3533 Nim积(二维&三维)
(Nim积相关资料来自论文曹钦翔<从"k倍动态减法游戏"出发探究一类组合游戏问题>) 关于Nim积计算的两个函数流程: 代码实现如下: ][]={,,,}; int N ...
随机推荐
- python保留字及其说明
保留字 说 明 and 用于表达式运算,逻辑与操作 as 用于类型转换 assert 断言,用于判断变量或条件表达式的值是否为真 break 中断循环语句的执行 class 用于定义类 con ...
- rabbitmq消息队列,消息发送失败,消息持久化,消费者处理失败相关
转:https://blog.csdn.net/u014373554/article/details/92686063 项目是使用springboot项目开发的,前是代码实现,后面有分析发送消息失败. ...
- DFA与动态规划
1.牛客练习赛45 A 给定字符串, 求字符不相邻的"QAQ"子序列个数. $dp[i][0]$ 只匹配一个'Q'的方案数的前缀和. $dp[i][1]$ 只匹配"QA& ...
- Java 8 Collectors 类的静态工厂方法
摘自<<Java 8 实战>> Collectors 类的静态工厂方法 工厂方法 返回类型 用于 toList List<T> 把流中所有项目收集到一个 List ...
- [NOIP10.4模拟赛]3.z题解--思维
题目链接: 咕咕 闲扯: 哈哈这道T3考场上又敲了5个namespace,300+行,有了前车之鉴还对拍过,本以为子任务分稳了 结果只有30分哈哈,明明用极限数据对拍过不知怎么回事最后数据又是读不全, ...
- vue打包后找不到资源路径问题
问题描述: 使用webpack打包vue项目后,前后端联调无法找到资源 解决方案: 一. 改为相对路径,去除axios中地址的第一个“/” onProxyReq: function (proxyReq ...
- selenium无头浏览器&规避操作
一.无头浏览器概述: 无头浏览器主要目的是打开浏览器但用户看不到 简单用法如下: from selenium import webdriver from time import sleep from ...
- win10环境安装配置Nginx
前言: 参考 https://blog.csdn.net/kisscatforever/article/details/73129270 Nginx的应用场景 1. http服务器.Ngin ...
- 使用nodejs实现OData的batch操作在Marketing Cloud里读取contact信息
我们先来看看Marketing Cloud系统里的contact信息: 一共1218374条数据. 我们用如下的nodejs代码通过OData来获取这些数据: var request = requir ...
- 【Distributed】限流技巧
一.概述 1.1 高并发服务限流特技 1.2 为什么要互联网项目要限流 1.3 高并发限流解决方案 二.限流算法 2.1 计数器 2.2 滑动窗口计数 2.3 令牌桶算法 使用RateLimiter实 ...