Codeforces914G Sum the Fibonacci(FWT)
FWT大杂烩。跟着模拟做很多次FWT即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N (1<<17)
#define P 1000000007
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,ab[N],c[N],de[N],f[N];
void OR(int *a,int n,int op)
{
for (int i=;i<=n;i<<=)
for (int j=;j<n;j+=i)
for (int k=j;k<j+(i>>);k++)
{
int x=a[k],y=a[k+(i>>)];
a[k]=x;if (op==) a[k+(i>>)]=(y+x)%P;else a[k+(i>>)]=(y-x+P)%P;
}
}
void AND(int *a,int n,int op)
{
for (int i=;i<=n;i<<=)
for (int j=;j<n;j+=i)
for (int k=j;k<j+(i>>);k++)
{
int x=a[k],y=a[k+(i>>)];
if (op==) a[k]=(x+y)%P;else a[k]=(x-y+P)%P;a[k+(i>>)]=y;
}
}
void XOR(int *a,int n,int op)
{
for (int i=;i<=n;i<<=)
for (int j=;j<n;j+=i)
for (int k=j;k<j+(i>>);k++)
{
int x=a[k],y=a[k+(i>>)];
a[k]=(x+y)%P,a[k+(i>>)]=(x-y+P)%P;
if (op) a[k]=1ll*a[k]*%P,a[k+(i>>)]=1ll*a[k+(i>>)]*%P;
}
}
void FWT(int *a,int *b,int n,int op)
{
if (op==) OR(a,n,),OR(b,n,);
else if (op==) AND(a,n,),AND(b,n,);
else XOR(a,n,),XOR(b,n,);
for (int i=;i<n;i++) a[i]=1ll*a[i]*b[i]%P;
if (op==) OR(a,n,),OR(b,n,);
else if (op==) AND(a,n,),AND(b,n,);
else XOR(a,n,),XOR(b,n,);
}
int main()
{
n=read();
while (n--) c[read()]++;
memcpy(de,c,sizeof(de));
FWT(de,c,N,);
for (int i=;i<N;i++)
{
for (int j=i;j;j=j-&i)
ab[i]=(ab[i]+1ll*c[j]*c[i^j]%P)%P;
ab[i]=(ab[i]+1ll*c[i]*c[])%P;
}
f[]=,f[]=;for (int i=;i<N;i++) f[i]=(f[i-]+f[i-])%P;
for (int i=;i<N;i++) ab[i]=1ll*ab[i]*f[i]%P,c[i]=1ll*c[i]*f[i]%P,de[i]=1ll*de[i]*f[i]%P;
FWT(ab,de,N,);FWT(ab,c,N,);
int ans=;for (int i=;i<;i++) ans=(ans+ab[<<i])%P;
cout<<ans;
return ;
}
Codeforces914G Sum the Fibonacci(FWT)的更多相关文章
- CF914G Sum the Fibonacci(FWT,FST)
CF914G Sum the Fibonacci(FWT,FST) Luogu 题解时间 一堆FWT和FST缝合而来的丑陋产物. 对 $ cnt[s_{a}] $ 和 $ cnt[s_{b}] $ 求 ...
- 「WC2018」州区划分(FWT)
「WC2018」州区划分(FWT) 我去弄了一个升级版的博客主题,比以前好看多了.感谢 @Wider 不过我有阅读模式的话不知为何 \(\text{LATEX}\) 不能用,所以我就把这个功能删掉了. ...
- 【CF850E】Random Elections(FWT)
[CF850E]Random Elections(FWT) 题面 洛谷 CF 题解 看懂题就是一眼题了... 显然三个人是等价的,所以只需要考虑一个人赢了另外两个人就好了. 那么在赢另外两个人的过程中 ...
- 【CF662C】Binary Table(FWT)
[CF662C]Binary Table(FWT) 题面 洛谷 CF 翻译: 有一个\(n*m\)的表格(\(n<=20,m<=10^5\)), 每个表格里面有一个\(0/1\), 每次可 ...
- HDU 1024 Max Sum Plus Plus (动态规划)
HDU 1024 Max Sum Plus Plus (动态规划) Description Now I think you have got an AC in Ignatius.L's "M ...
- 【HDU5909】Tree Cutting(FWT)
[HDU5909]Tree Cutting(FWT) 题面 vjudge 题目大意: 给你一棵\(n\)个节点的树,每个节点都有一个小于\(m\)的权值 定义一棵子树的权值为所有节点的异或和,问权值为 ...
- 【UOJ#310】【UNR#2】黎明前的巧克力(FWT)
[UOJ#310][UNR#2]黎明前的巧克力(FWT) 题面 UOJ 题解 把问题转化一下,变成有多少个异或和为\(0\)的集合,然后这个集合任意拆分就是答案,所以对于一个大小为\(s\)的集合,其 ...
- 关于快速沃尔什变换(FWT)的一些个人理解
定义 FWT是一种快速完成集合卷积运算的算法. 它可以用于求解类似 $C[i]=\sum\limits_{j⊗k=i}A[j]*B[k]$ 的问题. 其中⊗代表位运算中的|,&,^的其中一种. ...
- Codeforces663E Binary Table(FWT)
题目 Source http://codeforces.com/contest/663/problem/E Description You are given a table consisting o ...
随机推荐
- day 30
今日内容: 单例模式的四种方法 网络编程的介绍 单例模式: 什么是单例模式? 单例模式就是经过多次实例化,指向的是同一实例 为何要用单例模式? 可以节省内存资源 如何用单例模式? 方式一:利用绑定方法 ...
- 【LeetCode5】Longest Palindromic Substring★★
1.题目描述: 2.解题思路: 题意:求一个字符串的最长回文子串. 方法一:中心扩展法.遍历字符串的每一个字符,如果存在回文子串,那么中心是某一个字符(奇数)或两个字符的空隙(偶数),然后分两种情况( ...
- Python学习系列:PyCharm CE 安装与测试
开坑啦开坑啦~最近比赛要用Python了,开始强行学习. Mac下PyCharm CE 安装 先去百度PyCharm,一个很好用IDE,下载免费版的就够用啦: https://www.jetbrain ...
- Spring Boot (十三): Spring Boot 小技巧
一些 Spring Boot 小技巧.小知识点 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用 Jpa,另外一种是 Spring JDBC .两种方式 ...
- mysql基础(一)——表、索引、视图
SQL语句不区分大小写 创建数据库 create database myData 删除数据库 drop database myData 创建表 create table company ( code ...
- selenium常用命令
openopen(url)- 在浏览器中打开URL,可以接受相对和绝对路径两种形式type type(inputLocator, value)- 模拟人手的输入过程,往指定的input中输入值- 也适 ...
- 软件测试_测试工具_APP测试工具_对比
以下是我自己整理的APP测试工具对比,各个工具相关并不全面.尤其关于收费一项,我只是针对自己公司的实际情况进行对比的,每个工具还有其他收费套餐可以选择,详情可进入相关官网进行查看 以下是部分官网链接: ...
- IDEA2018.1安装配置文档
一.软件安装 1. 下载地址: https://www.jetbrains.com/idea/download/#section=windows 2. 安装: 点击.exe,选择安装路径,点击next ...
- 贪心算法HURUST题目
题目描述: Yogurt factory The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. ...
- 区块链扩容方案之Gas值限制
区块链扩容一直是区块链团队的重点研究方向.因为比特币对区块大小的设定是固定的,而且中本聪将最初大小值限定为1M,但随着交易量的增加,网络拥堵情况也愈渐严重,最终也导致了比特币的分叉. 区别于比特币固定 ...