BZOJ.4589.Hard Nim(FWT)】的更多相关文章

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 一开始异或和为0的话先手必败.有 n 堆,每堆可以填那些数,求最后异或和为0的方案数,就是一个快速幂的异或FWT. 注意快速幂的过程中对那些数组直接乘就行,不用总是FWT!!! 为什么比Zinn慢了1008ms? #include<iostream> #include<cstdio> #include<cstring> #include<algorit…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 先手必败,是一开始所有石子的异或和为0: 生成函数 (xpri[1] + xpri[2] + ... + xpri[k])n,pri[k] <= m FWT求解即可: 而且不要快速幂里面每次变换来变换去的,只有快速幂前后需要变换. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #…
题目链接 FWT 题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数. 令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到多项式的第\(0\)项. 如果\(n\)很小,可以一次次的FWT.事实上在第一次FWT之后,直接快速幂就行了,不需要中间IFWT转回去. //1652kb 4352ms #include <cstdio> #include <cctype> #include <cstring&g…
[题目分析] 位运算下的卷积问题. FWT直接做. 但还是不太民白,发明者要承担泽任的. [代码] #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i) #define D(i,j,k) for (int i=j;i>=k;-…
4589: Hard Nim Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 275  Solved: 152[Submit][Status][Discuss] Description     Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: 1. Claris和NanoApe两个人轮流拿石子,Claris先拿. 2. 每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜. 不同的初始局面,决定了最终的…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4589 [题目大意] 有n堆石子,每堆都是m以内的质数,请问后手必胜的局面有几种 [题解] 后手必胜,则sg为0,那么就是求n个m以内的数xor为0的情况有几种, 首先筛出素数,保存素数的个数数组,利用FWT计算c[i^j]=a[i]*b[j], 计算n次的结果逆向变化回来就是最终的sg个数数组, 在计算n次c[i]=a[i]*b[i]的过程中,等价于计算c[i]=a[i]^n, 这里…
题目链接  Hard Nim 设$f[i][j]$表示前$i$个数结束后异或和为$j$的方案数 那么$f[i][j] = f[i-1][j$ $\hat{}$ $k]$,满足$k$为不大于$m$的质数. 这个$DP$太暴力了.让我们冷静分析. 设不大于m的质数从小到大分别为$c_{1}$, $c_{2}$, ..., $c_{k}$ $f[i][j] = ∑f[i-1][j$ $\hat{}$ $c[k]]$, 我们令$g[c[i]]$为$1$,其余为$0$. $f[i][j] = ∑f[i-1…
T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次-- 就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=500005,mod=1e9+7,inv2=500000004; int n,m,q[N],tot,bt,…
Description 题库链接 两人玩 \(nim\) 游戏,\(n\) 堆石子,每堆石子初始数量是不超过 \(m\) 的质数,那么后手必胜的方案有多少种.对 \(10^9+7\) 取模. \(1\leq n\leq 10^9,2\leq m\leq 50000\) Solution 我们记多项式 \(A(x)\) ,对于 \(x_i\) 若 \(i\leq m\) 且 \(i\) 为质数,那么 \(x_i\) 的系数为 \(1\) ,其余情况系数为 \(0\) . 显然当 \(n=2\) 时…
#include<bits/stdc++.h> #define ll long long using namespace std; ; ; ; ; <<],b[<<],N; int n,m; bool vis[maxn]; int prime[maxn]; ; void get_prime() // prime=0;else 1; { vis[]=; ;i<maxn;i++) { if(!vis[i]) prime[tot++]=i; ;j<tot &…