题意

题解

从大到小枚举$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+2
l$的结果
显然两个序列左半部分完全一样,右半部分完全相反
设$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)的更多相关文章

  1. BZOJ.4589.Hard Nim(FWT)

    题目链接 FWT 题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数. 令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到 ...

  2. bzoj 4589 Hard Nim——FWT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 一开始异或和为0的话先手必败.有 n 堆,每堆可以填那些数,求最后异或和为0的方案数, ...

  3. bzoj 4589 Hard Nim —— FWT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 先手必败,是一开始所有石子的异或和为0: 生成函数 (xpri[1] + xpri[2 ...

  4. BZOJ 4589 Hard Nim ——FWT

    [题目分析] 位运算下的卷积问题. FWT直接做. 但还是不太民白,发明者要承担泽任的. [代码] #include <cstdio> #include <cstring> # ...

  5. BZOJ 4555(第二类斯特林数+NTT)

    传送门 解题思路 数学题,推式子.求\(f(n)=\sum\limits_{i=0}^n\sum\limits_{j=0}^iS(i,j)2^jj!\) 首先可以把\(j\)往前提: \[f(n)=\ ...

  6. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  7. 洛谷 4106 / bzoj 3614 [HEOI2014]逻辑翻译——思路+类似FWT

    题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...

  8. bzoj 4589 FWT

    #include<bits/stdc++.h> #define ll long long using namespace std; ; ; ; ; <<],b[<< ...

  9. bzoj千题计划308:bzoj4589: Hard Nim(倍增FWT+生成函数)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4589 n*m*m 做法 dp[i][j] 前i堆石子,异或和为j的方案数 第一重循环可以矩阵快速幂 ...

随机推荐

  1. 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】

    首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...

  2. NET Core:搭建私有Nuget服务器以及打包发布Nuget包

    docker 安装 https://www.cnblogs.com/liuxiaoji/p/11014329.html 1.使用docker搭建私有Nuget服务器 docker run -d -p ...

  3. 单元操作和仓储模式 repository+unitOfWork

    仓储和工作单元模式是用来在数据访问层和业务逻辑层之间创建一个抽象层.应用这些模式,可以帮助用来隔离你的程序在数据存储变化. 在数据源层和业务层之间增加一个repository层进行协调,有如下作用:1 ...

  4. 深入Java虚拟机之内存区域与内存溢出

    一.内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器.Java虚拟机栈.本地方 ...

  5. Jquery 学习-菜鸟教程

    jquery效果和元素选择 //元素选择 $(this).hide(); $("p.test") //隐藏所有class="test"的<p>元素 ...

  6. ffmpeg生成视频封面图

    ffmpeg 是一个视频处理软件 php-ffmpeg 是一个让 php 可以操作 ffmpeg 的 php插件,封装好了各种操作视频的名命令.直接调用对应的方法即可. 使用过程很曲折也很简单 曲折在 ...

  7. Linux下MySql基本操作命令

    (1).切换至MySql目录下[假设MySql安装路径为:/home/mysql/bin] cd /home/mysql/bin (2).连接MySql mysql -u用户名 -p,回车后输入密码 ...

  8. 迭代器遍历【List、Set、Map】

    迭代器遍历[List.Set.Map] example package boom.collection; import java.util.ArrayList; import java.util.Ha ...

  9. 开关灯 ToggleButton

    开关灯 ToggleButton textOn:对应true的时候:textOff:对应false的时候:给toggleButton设置监听器toggleButton.setOnCheckChange ...

  10. zencart产品批量表上传后SEO三要素状态以及特价时间修改

    ', metatags_products_name_status ', metatags_model_status ', metatags_price_status ', metatags_title ...