BZOJ 5267 特工 (类FWT)】的更多相关文章

题意 题解 从大到小枚举\(l\), 把一个序列从\(2^{l+1}\)分成两个独立的\(2^l\),去除两半的影响. 设去除前的序列为\(b\), 去除后序列为\(b'\) 则有\(b_{2^{l+1}-1}-b_{2^l-1}=\sum^{2^{l+1}-1}_{i=2^l}b_i\) 考虑左边的一个位置\(d\)与右边的位置\(d+2^l\)相对应 考虑一个序列\(s_0\)的第\(i\)位为\(\text{bitcount}((i\ \text{or}\ d)\ \text{xor}\…
题目链接 FWT 题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数. 令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到多项式的第\(0\)项. 如果\(n\)很小,可以一次次的FWT.事实上在第一次FWT之后,直接快速幂就行了,不需要中间IFWT转回去. //1652kb 4352ms #include <cstdio> #include <cctype> #include <cstring&g…
题目: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直接做. 但还是不太民白,发明者要承担泽任的. [代码] #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;-…
传送门 解题思路 数学题,推式子.求\(f(n)=\sum\limits_{i=0}^n\sum\limits_{j=0}^iS(i,j)2^jj!\) 首先可以把\(j\)往前提: \[f(n)=\sum\limits_{j=0}^n2^jj!\sum\limits_{i=0}^nS(i,j)\] 然后把斯特林数按照通项展开: \[f(n)=\sum\limits_{j=0}^n2^jj!\sum\limits_{i=0}^n\tfrac{1}{m!}\sum\limits_{k=0}^j(-…
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特征. 继承 如果用.Net写一个A类继承B类的话,写法会是大致如下: Public Class A : B{ ....... } Java的话却要通过extends关键字在声明类的时候指定其父类(基类),所以上面的.Net写法要转换成Java的话应该是下面的样子: Public clas A ext…
题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 可以先把给出的东西排序成这样: -1 -1 -1 -1 -1  1 -1  1 -1 -1  1  1 1 -1 -1 1 -1  1 1  1 -1 1  1  1 就是后面看成低位.前面看成高位,1看成1.-1看成0的二进制的顺序. 发现把第1行和第2行相加再除以2,得到的就是与 x3 无关的…
#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 &…
https://www.lydsy.com/JudgeOnline/problem.php?id=4589 n*m*m 做法 dp[i][j] 前i堆石子,异或和为j的方案数 第一重循环可以矩阵快速幂优化 后面求出序列的生成函数可以FWT优化 做log次FWT也很慢(logn*m*logm) 两个合并就是倍增FWT,即先对生成函数的序列做一次正变换,对正变换得到的每个结果快速幂,最后逆变换回去 时间复杂度O(logn*m+m*logm) 生成函数:是质数则系数为1,否则为0 #include<c…