CF914G Sum the Fibonacci

解:发现我们对a和b做一个集合卷积,对d和e做一个^FWT,然后把这三个全部对位乘上斐波那契数,然后做&FWT就行了。
#include <bits/stdc++.h>
const int N = , MO = 1e9 + , inv2 = (MO + ) / ;
int n, lm, f[N], a[N], b[N], c[N], cnt[N], d[][N], e[][N];
inline void FWT_or(int *a, int n, int f) {
for(int len = ; len < n; len <<= ) {
for(int i = ; i < n; i += (len << )) {
for(int j = ; j < len; j++) {
a[i + len + j] = ((a[i + len + j] + f * a[i + j]) % MO + MO) % MO;
}
}
}
return;
}
inline void FWT_and(int *a, int n, int f) {
for(int len = ; len < n; len <<= ) {
for(int i = ; i < n; i += (len << )) {
for(int j = ; j < len; j++) {
a[i + j] = ((a[i + j] + f * a[i + len + j]) % MO + MO) % MO;
}
}
}
return;
}
inline void FWT_xor(int *a, int n, int f) {
for(int len = ; len < n; len <<= ) {
for(int i = ; i < n; i += (len << )) {
for(int j = ; j < len; j++) {
int t = a[i + len + j];
a[i + len + j] = (a[i + j] - t + MO) % MO;
a[i + j] = (a[i + j] + t) % MO;
if(f == -) {
a[i + len + j] = 1ll * a[i + len + j] * inv2 % MO;
a[i + j] = 1ll * a[i + j] * inv2 % MO;
}
}
}
}
return;
}
int main() {
int n;
scanf("%d", &n);
for(int i = , x; i <= n; i++) {
scanf("%d", &x);
a[x]++;
}
n = ;
lm = << ;
cnt[] = f[] = ;
for(int i = ; i < lm; i++) {
f[i] = (f[i - ] + f[i - ]) % MO;
cnt[i] = cnt[i - (i & (-i))] + ;
}
memcpy(c, a, lm * sizeof(int));
for(int i = ; i < lm; i++) {
d[cnt[i]][i] = a[i];
}
for(int i = ; i <= n; i++) {
FWT_or(d[i], lm, );
}
for(int i = ; i <= n; i++) {
for(int j = ; j <= i; j++) {
for(int s = ; s < lm; s++) {
e[i][s] = (e[i][s] + 1ll * d[j][s] * d[i - j][s] % MO) % MO;
}
}
}
for(int i = ; i <= n; i++) {
FWT_or(e[i], lm, -);
}
for(int i = ; i < lm; i++) {
b[i] = 1ll * e[cnt[i]][i] * f[i] % MO;
}
FWT_xor(c, lm, );
for(int i = ; i < lm; i++) {
c[i] = 1ll * c[i] * c[i] % MO;
}
FWT_xor(c, lm, -);
for(int i = ; i < lm; i++) {
c[i] = 1ll * c[i] * f[i] % MO;
}
for(int i = ; i < lm; i++) {
a[i] = 1ll * a[i] * f[i] % MO;
}
FWT_and(a, lm, );
FWT_and(b, lm, );
FWT_and(c, lm, );
for(int i = ; i < lm; i++) {
a[i] = 1ll * a[i] * b[i] % MO * c[i] % MO;
}
FWT_and(a, lm, -);
int ans = ;
for(int i = ; i < lm; i <<= ) {
ans = (ans + a[i]) % MO;
}
printf("%d\n", ans);
return ;
}
AC代码
CF914G Sum the Fibonacci的更多相关文章
- CF914G Sum the Fibonacci(FWT,FST)
CF914G Sum the Fibonacci(FWT,FST) Luogu 题解时间 一堆FWT和FST缝合而来的丑陋产物. 对 $ cnt[s_{a}] $ 和 $ cnt[s_{b}] $ 求 ...
- 题解 CF914G Sum the Fibonacci
题目传送门 题目大意 给出\(n,s_{1,2,...,n}\),定义一个五元组\((a,b,c,d,e)\)合法当且仅当: \[1\le a,b,c,d,e\le n \] \[(s_a\vee s ...
- CF914G Sum the Fibonacci FWT、子集卷积
传送门 一道良心的练习FWT和子集卷积的板子-- 具体来说就是先把所有满足\(s_a \& s_b = 0\)的\(s_a \mid s_b\)的值用子集卷积算出来,将所有\(s_a \opl ...
- CF914G Sum the Fibonacci (快速沃尔什变换FWT + 子集卷积)
题面 题解 这是一道FWT和子集卷积的应用题. 我们先设 cnt[x] 表示 Si = x 的 i 的数量,那么 这里的Nab[x]指满足条件的 Sa|Sb=x.Sa&Sb=0 的(a,b)二 ...
- 【CF914G】Sum the Fibonacci 快速??变换模板
[CF914G]Sum the Fibonacci 题解:给你一个长度为n的数组s.定义五元组(a,b,c,d,e)是合法的当且仅当: 1. $1\le a,b,c,d,e\le n$2. $(s_a ...
- Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined)G. Sum the Fibonacci
题意:给一个数组s,求\(f(s_a | s_b) * f(s_c) * f(s_d \oplus s_e)\),f是斐波那契数列,而且要满足\(s_a\&s_b==0\),\((s_a | ...
- 【codeforces914G】Sum the Fibonacci FWT+FST(快速子集变换)
题目描述 给出一个长度为 $n$ 的序列 $\{s\}$ ,对于所有满足以下条件的五元组 $(a,b,c,d,e)$ : $1\le a,b,c,d,e\le n$ : $(s_a|s_b)\& ...
- codeforces914G Sum the Fibonacci
题目大意:给定一个长为$n$($n\leq 10^6$)的序列S,定义一个合法的五元组$(a,b,c,d,e)$合法当且仅当 $$ ( S_a \mid S_b ) and S_c and ( S_d ...
- CF 914 G Sum the Fibonacci —— 子集卷积,FWT
题目:http://codeforces.com/contest/914/problem/G 其实就是把各种都用子集卷积和FWT卷起来算即可: 注意乘 Fibonacci 数组的位置: 子集卷积时不能 ...
随机推荐
- ubuntu 通过apt安装jdk
需要先添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 安装jdk8 sudo apt-get instal ...
- python 3.7 安装mysqlclient 错误解决
安装时出现的问题 >pip3.7 install mysqlclientCollecting mysqlclient Using cached https://files.pythonhost ...
- SQLServer之CHECK约束
CHECK约束添加规则 1.CHECK 约束用于限制列中的值的范围. 2.Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Ch ...
- 英语口语练习系列-C03-常用问句
连接到英语口语系列总分类 连接到上一章抱怨 枫桥夜泊 How are you doing?你好吗? 美国人见面时候最常用的打招呼方式: "Hey! How are you doing?&qu ...
- 【转】Android OkHttp3简介和使用详解
一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpC ...
- Oracle 查询表对应的索引
select col.table_owner "table_owner", idx.table_name "table_name", col.index_own ...
- java8 Lambda表达式的新手上车指南(1)--基础语法和函数式接口
背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...
- STM32F103/429串口IAP+Ymodem升级
起因: 串口IAP升级在正点原子的例程中有讲解,正点原子的方法是:在RAM中开辟一个120K的数据空间,用来存放bin文件,bin文件通过串口一次性发送到单片机,然后再实现程序的跳转.但是这种方法在实 ...
- UOJ188 Sanrd Min_25筛
传送门 省选之前做数论题会不会有Debuff啊 这道题显然是要求\(1\)到\(x\)中所有数第二大质因子的大小之和,如果不存在第二大质因子就是\(0\) 线性筛似乎可以做,但是\(10^{11}\) ...
- Kaggle教程——大神教你上分
本文记录笔者在观看Coursera上国立经济大学HLE的课程 How to win a data science competetion中的收获,和大家分享.课程的这门课的讲授人是Kaggle的大牛, ...