BZOJ 5267 特工 (类FWT)
题意
题解
从大到小枚举$l$, 把一个序列从$2^{l+1}$分成两个独立的$2l$,去除两半的影响。
设去除前的序列为$b$, 去除后序列为$b'$
则有$b_{2{l+1}-1}-b_{2l-1}=\sum{2^{l+1}-1}b_i$
考虑左边的一个位置$d$与右边的位置$d+2l$相对应
考虑一个序列$s_0$的第$i$位为$\text((i\ \text\ d)\ \text\ i)$,$s_1$为把$s_1$的$d$换成$d+2l$的结果
显然两个序列左半部分完全一样,右半部分完全相反
设$z$为$b'$与$s_0$(或$s_1$)左半部分对应位置乘积之和,$y_0,y_1$分别为$b'$与$s_0,s_1$右半部分对应位置乘积之和
则$b'd=z,b'{d+2^l}=y_1$
且有方程$z+y_0=b_d,z+y_1=b{d+2l},y_0+y_1=b_{2{l+1}-1}-b_{2^l-1}$
解之即可。
时间复杂度$O(n\log n)$.
代码
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cassert>
#define llong long long
using namespace std;
char c[40000010];
int ns;
inline llong read(){
while(c[ns]<'0'||c[ns]>'9')ns++;
llong x=0;
while(c[ns]>='0'&&c[ns]<='9')x=(x<<3)+(x<<1)+c[ns++]-'0';
return x;
}
const int N = 1<<20;
llong a[N+3];
int n;
int main()
{
c[fread(c,1,40000010,stdin)]=0; //input optimization
n = read();
for(int i=0; i<n; i++) a[i] = read();
for(int i=(n>>1); i; i>>=1)
{
for(int j=0; j<n; j+=(i<<1))
{
llong tmp = a[j+(i<<1)-1]-a[j+i-1];
for(int k=0; k<i; k++)
{
llong x = a[j+k],y = a[j+i+k];
a[j+k] = (-tmp+x+y)>>1,a[j+i+k] = (tmp-x+y)>>1;
}
}
}
for(int i=0; i<n; i++) printf("%lld ",a[i]); puts("");
return 0;
}
BZOJ 5267 特工 (类FWT)的更多相关文章
- BZOJ.4589.Hard Nim(FWT)
题目链接 FWT 题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数. 令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到 ...
- bzoj 4589 Hard Nim——FWT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 一开始异或和为0的话先手必败.有 n 堆,每堆可以填那些数,求最后异或和为0的方案数, ...
- bzoj 4589 Hard Nim —— FWT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 先手必败,是一开始所有石子的异或和为0: 生成函数 (xpri[1] + xpri[2 ...
- BZOJ 4589 Hard Nim ——FWT
[题目分析] 位运算下的卷积问题. FWT直接做. 但还是不太民白,发明者要承担泽任的. [代码] #include <cstdio> #include <cstring> # ...
- BZOJ 4555(第二类斯特林数+NTT)
传送门 解题思路 数学题,推式子.求\(f(n)=\sum\limits_{i=0}^n\sum\limits_{j=0}^iS(i,j)2^jj!\) 首先可以把\(j\)往前提: \[f(n)=\ ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- 洛谷 4106 / bzoj 3614 [HEOI2014]逻辑翻译——思路+类似FWT
题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...
- bzoj 4589 FWT
#include<bits/stdc++.h> #define ll long long using namespace std; ; ; ; ; <<],b[<< ...
- bzoj千题计划308:bzoj4589: Hard Nim(倍增FWT+生成函数)
https://www.lydsy.com/JudgeOnline/problem.php?id=4589 n*m*m 做法 dp[i][j] 前i堆石子,异或和为j的方案数 第一重循环可以矩阵快速幂 ...
随机推荐
- Leaflet个人封装笔记
<!DOCTYPE html> <html> <head> <link href="style/leaflet.css" type=&qu ...
- gflags 编译动态库
gflags 编译动态库 这里涉及到gflags的安装,原来使用 sudo apt-get install libgflags-dev 但是后面有人在环境中下载安装了libgflags的安装包,解压后 ...
- JS基础_运算符的优先级
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- pycharm问题
Pycharm 出现Unresolved reference '' 错误的解决方法:http://www.mamicode.com/info-detail-2190842.html
- java写webservice接口
有一个需求:要求根据设备mac和终端设备类型来查询设备库存状态. 接口协议是采用webservice协议,信息交互方式为xml格式信息 输入参数存放到XML各个节点下,并转为一个String,作为接口 ...
- window, linux, mac 比较文件和文件夹的区别
windows 端 winmerge beyondcompare Mac 和 linux 端 Meld kdiff3 diff command 更多可参考:https://alternativeto ...
- [Scrapy-6] XPath使用的一个坑
先上代码: import scrapy from scrapy.selector import Selector class QuoteSpider(scrapy.Spider): name = &q ...
- TCP超时与重传
TCP提供可靠的传输层.它使用的方法之一就是确认从另一端收到的数据.但数据和确认都有可能丢失.TCP通过在发送时设置一个定时器来解决这种问题.如果当定时器溢出时还没收到确认,他就重传数该数据.对任何实 ...
- java_day04_数组
chap04目标:数组---------------------------------------------- 1.概述 数组是一组数据的集合,数组中的每个数据被称为元素.在java中,数组也是对 ...
- html中onclick传的数字不对的原因
在html中数字16位以后传输的时候都是0,改成字符串就可以了