解:发现我们对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的更多相关文章

  1. CF914G Sum the Fibonacci(FWT,FST)

    CF914G Sum the Fibonacci(FWT,FST) Luogu 题解时间 一堆FWT和FST缝合而来的丑陋产物. 对 $ cnt[s_{a}] $ 和 $ cnt[s_{b}] $ 求 ...

  2. 题解 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 ...

  3. CF914G Sum the Fibonacci FWT、子集卷积

    传送门 一道良心的练习FWT和子集卷积的板子-- 具体来说就是先把所有满足\(s_a \& s_b = 0\)的\(s_a \mid s_b\)的值用子集卷积算出来,将所有\(s_a \opl ...

  4. CF914G Sum the Fibonacci (快速沃尔什变换FWT + 子集卷积)

    题面 题解 这是一道FWT和子集卷积的应用题. 我们先设 cnt[x] 表示 Si = x 的 i 的数量,那么 这里的Nab[x]指满足条件的 Sa|Sb=x.Sa&Sb=0 的(a,b)二 ...

  5. 【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 ...

  6. 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 | ...

  7. 【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)\& ...

  8. 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 ...

  9. CF 914 G Sum the Fibonacci —— 子集卷积,FWT

    题目:http://codeforces.com/contest/914/problem/G 其实就是把各种都用子集卷积和FWT卷起来算即可: 注意乘 Fibonacci 数组的位置: 子集卷积时不能 ...

随机推荐

  1. Python函数(一)之杵臼之交

    Python函数 函数的作用:对功能进行封装,减少重复代码,方便维护,流程清晰明了,易于理解. 函数的结构: def 函数名():      函数体       return语句 函数的返回值: 可以 ...

  2. local_irq_disable和disable_irq的区别

    local_irq_disable: local_irq_disable的功能是屏蔽当前CPU上的所有中断,通过操作arm核心中的寄存器来屏蔽到达CPU上的中断,此时中断控制器中所有送往该CPU上的中 ...

  3. 【记录】IntelliJ IDEA—IDEA2018-2019激活

    摘要 最智能的java ide [有能力请支持正版]     1.将 0.0.0.0 account.jetbrains.com 和 0.0.0.0 www.jetbrains.com添加到 host ...

  4. (一)走进Metasploit渗透测试框架

    渗透测试的流程 渗透测试是一种有目的性的,针对目标机构计算机系统安全的检测评估方法,渗透测试的主要目的是改善目标机构的安全性.渗透测试各个阶段的基本工作: 1.前期交互阶段 在这个阶段,渗透测试工程师 ...

  5. MongoDB的常用命令和增查改删

    数据库操作 Mongodb MySQL 查询库 show databases | show dbs show databases 选中库 use databaseName use databaseNa ...

  6. 数据库【mysql】之pymysql

    安装模块 pip install pymysql 导入模块 import pymysql 创建链接 conn = pymysql.connect(host=') 创建索引 cursor = conn. ...

  7. Django-CRM项目学习(四)-stark的分页器与搜索框

    1.分页器 分页器相关知识点,请查看以下链接 https://www.cnblogs.com/gbq-dog/p/10724859.html 2.代码归类 归类前代码 header_list = [] ...

  8. Redis数据持久化、数据备份、数据的故障恢复

    1.redis持久化的意义----redis故障恢复 在实际的生产环境中,很可能会遇到redis突然挂掉的情况,比如redis的进程死掉了.电缆被施工队挖了(支付宝例子)等等,总之一定会遇到各种奇葩的 ...

  9. Redtiger SQL注入练习(二)

    第六关: 点击 click me,构造url:user=1',返回user not found.user=1'',同样. 猜测是数字型注入,构造order by , user=1 order by  ...

  10. vue diff 算法学习

    function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) { let oldStartIdx ...