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的方案数 第一重循环可以矩阵快速幂 ...
随机推荐
- swagger 报错打不开
1.controller中的接口里使用的 qto的数据类型有问题: qo中的字段中缺少:(@JsonProperty(value = "sort"),以及定义的example值的格 ...
- JS基础_非布尔值的与或运算
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- O040、Migrate Instance 操作详解
参考https://www.cnblogs.com/CloudMan6/p/5538599.html Migrate 操作的作用是将instance 从当前的计算节点迁移到其他的计算节点上. ...
- LeetCode:176.第二高的薪水
题目链接:https://leetcode-cn.com/problems/second-highest-salary/ 题目 编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Sal ...
- input框blur事件 ie问题
在chrome和firefox里会返回 在ie却获取不到relatedTarget:可以通过document.activeElement获取到点击到哪个标签 注意document.activeElem ...
- js 使用sessionStorage总结与实例
作用:它只是可以将一部分数据在当前会话中保存下来,刷新页面数据依旧存在.但当页面关闭后,sessionStorage 中的数据就会被清空 sessionStorage的方法setItem存储value ...
- XSS防御和绕过1
原理:对用户输入没做过滤和处理,是用户可以输入一些东西(例如js),控制输出达到一些攻击目的 1.DOM型 基于DOM的XSS有时也称为type0XSS.当用户能够通过交互修改浏览器页面中的DOM(D ...
- mysql 知识整理
前言 安装 使用 关于mysql程式的linux命令 启动mysqld 检查端口是否运行 查看数据库程式相关信息 查看mysql版本 查看配置文件位置 登陆mysql 修改密码 SQL命令 查看数据库 ...
- 第十章、jupyter入门之pandas
目录 第十章.jupyter入门之pandas 一.什么是pandas 二.Series 三.基本概念 四.基本运算 五.DataFrame 第十章.jupyter入门之pandas 一.什么是pan ...
- Action向视图传值的6种方式(转)
在使用ASP.NET MVC进行项目开发时,经常会碰到从Action向视图传值的问题,今天我就把我所知道的方式总结了一下,分成了以下六种: 1.使用ViewData进行传值 在Action中,有如下代 ...