title

题目

solution

(sa∣sb)&sc&(sd⊕se)=2i,i∈Z;sa&sb=0(s_a|s_b)\&s_c\&(s_d⊕s_e)=2^i,i∈Z;s_a\&s_b=0(sa​∣sb​)&sc​&(sd​⊕se​)=2i,i∈Z;sa​&sb​=0
令i=sa∣sb,j=sc,d=sd⊕sei=s_a|s_b,j=s_c,d=s_d⊕s_ei=sa​∣sb​,j=sc​,d=sd​⊕se​

∑x∑i&j&k=xfibi∗fibj∗fibk∗(∑sa∣sb=i,sa&sb=01)∗(∑sc=j1)∗(∑sd⊕se=k1)\sum_{x}\sum_{i\&j\&k=x}fib_i*fib_j*fib_k*(\sum_{s_a|s_b=i,s_a\&s_b=0}1)*(\sum_{s_c=j}1)*(\sum_{s_d⊕s_e=k}1)x∑​i&j&k=x∑​fibi​∗fibj​∗fibk​∗(sa​∣sb​=i,sa​&sb​=0∑​1)∗(sc​=j∑​1)∗(sd​⊕se​=k∑​1)

令fi=(∑sa∣sb=i,sa&sb=01),gj=(∑sc=j1),hk=(∑sd⊕se=k1)f_i=(\sum_{s_a|s_b=i,s_a\&s_b=0}1),g_j=(\sum_{s_c=j}1),h_k=(\sum_{s_d⊕s_e=k}1)fi​=(∑sa​∣sb​=i,sa​&sb​=0​1),gj​=(∑sc​=j​1),hk​=(∑sd​⊕se​=k​1)
fff就是子集卷积直接做;ggg不做操作;hhh就是常规的FWT_xorFWT\_xorFWT_xor卷积
最后三个一起带着各自的斐波拉契权值,做个FWT_andFWT\_andFWT_and卷积即可

code

#include <cstdio>
#include <cstring>
#define mod 1000000007
#define int long long
#define maxn 1 << 18
int n, ret, inv = ( mod + 1 ) >> 1;
int f[maxn], g[maxn], h[maxn], tmp[maxn], ans[maxn], fib[maxn];
int dp[20][maxn];void FWT_or( int *v, int opt ) {for( int i = 1;i < maxn;i <<= 1 )for( int j = 0;j < maxn;j += ( i << 1 ) )for( int k = 0;k < i;k ++ )v[j + k + i] = ( v[j + k + i] + v[j + k] * opt + mod ) % mod;
}void FWT_and( int *v, int opt ) {for( int i = 1;i < maxn;i <<= 1 )  for( int j = 0;j < maxn;j += ( i << 1 ) )for( int k = 0;k < i;k ++ )v[j + k] = ( v[j + k] + v[j + k + i] * opt + mod ) % mod;;
}void FWT_xor( int *v, int opt ) {for( int i = 1;i < maxn;i <<= 1 )for( int j = 0;j < maxn;j += ( i << 1 ) )for( int k = 0;k < i;k ++ ) {int x = v[j + k], y = v[j + k + i];v[j + k] = ( x + y ) % mod;v[j + k + i] = ( x - y + mod ) % mod;if( opt == -1 ) {v[j + k] = v[j + k] * inv % mod;v[j + k + i] = v[j + k + i] * inv % mod;}}
}signed main() {scanf( "%lld", &n );for( int i = 1, x;i <= n;i ++ ) {scanf( "%lld", &x );f[x] ++, g[x] ++, h[x] ++;}fib[1] = 1;for( int i = 2;i < maxn;i ++ )fib[i] = ( fib[i - 1] + fib[i - 2] ) % mod;for( int i = 0;i < maxn;i ++ )dp[__builtin_popcount( i )][i] = f[i], f[i] = 0;n = 18;for( int i = 0;i < n;i ++ )FWT_or( dp[i], 1 );for( int i = 0;i < n;i ++ ) {memset( tmp, 0, sizeof( tmp ) );for( int j = 0;j <= i;j ++ )for( int k = 0;k < maxn;k ++ )tmp[k] = ( tmp[k] + dp[j][k] * dp[i - j][k] % mod ) % mod;FWT_or( tmp, -1 );for( int j = 0;j < maxn;j ++ )if( __builtin_popcount( j ) == i )f[j] = ( f[j] + tmp[j] ) % mod;}FWT_xor( h, 1 );for( int i = 0;i < maxn;i ++ )h[i] = h[i] * h[i] % mod;FWT_xor( h, -1 ); for( int i = 0;i < maxn;i ++ )f[i] = f[i] * fib[i] % mod, g[i] = g[i] * fib[i] % mod, h[i] = h[i] * fib[i] % mod;FWT_and( f, 1 ), FWT_and( g, 1 ), FWT_and( h, 1 );for( int i = 0;i < maxn;i ++ )ans[i] = f[i] * g[i] % mod * h[i] % mod;FWT_and( ans, -1 );for( int i = 1;i < maxn;i <<= 1 )ret = ( ret + ans[i] ) % mod;printf( "%lld\n", ret );return 0;
}

CF914G Sum the Fibonacci(FWT模板+子集卷积)相关推荐

  1. 【学习笔记】FWT,子集卷积

    文章目录 1.概述 2.思想 3.按位或卷积 3.1.定义 3.2.正变换 3.3.逆变换 3.4.代码实现 4.按位与卷积 4.1.定义 4.2.正变换 4.3.逆变换 4.4.代码实现 5.按位异 ...

  2. CF838C-Future Failure【dp,子集卷积】

    正题 题目链接:https://www.luogu.com.cn/problem/CF838C 题目大意 一个字符串sss,两个人轮流操作,每次每个人可以选择删掉一个字符或者重排列这个字符串,但是不能 ...

  3. 洛谷P6097:【模板】子集卷积(FWT)

    解析 完全可以当一道 DP 题而不是模板来做. 首先第一个条件: i∣j=ki|j=ki∣j=k 比较简单,直接上FWT板子即可. 考虑第二个条件:i&j=0i\&j=0i&j ...

  4. P6097-[模板]子集卷积

    正题 题目链接:https://www.luogu.com.cn/problem/P6097 题目大意 长度为2n2^n2n的序列a,ba,ba,b求一个ccc满足 ck=∑i∣j=k,i&j ...

  5. 图像处理-模板、卷积的整理

    一:什么是卷积 离散卷积的数学公式可以表示为如下形式: f(x) = - 其中C(k)代表卷积操作数,g(i)代表样本数据, f(x)代表输出结果. 举例如下: 假设g(i)是一个一维的函数,而且代表 ...

  6. leetcode 416. Partition Equal Subset Sum | 416. 分割等和子集(Java)

    题目 https://leetcode.com/problems/partition-equal-subset-sum/ 题解 乍一看是背包问题,但不同的是,本题要求结果等于某值,背包要求结果小于某值 ...

  7. 快速沃尔什变换(FWT)及K进制异或卷积快速子集变换(FST)讲解

    前言: $FWT$是用来处理位运算(异或.与.或)卷积的一种变换.位运算卷积是什么?形如$f[i]=\sum\limits_{j\oplus k==i}^{ }g[j]*h[k]$的卷积形式(其中$\ ...

  8. 【Atcoder agc020 C】Median Sum,序列子集和中位数,bitset,01背包

    problem C - Median Sum / Time Limit: 2 sec / Memory Limit: 512 MB Score : 700 points Problem Stateme ...

  9. 动态规划法(三)子集和问题(Subset sum problem)

      继续讲故事~~   上次讲到我们的主人公丁丁,用神奇的动态规划法解决了杂货店老板的两个找零钱问题,得到了老板的肯定.之后,他就决心去大城市闯荡了,看一看外面更大的世界.   这天,丁丁刚回到家,他 ...

最新文章

  1. 遗传算法就是创造力的本质
  2. linux重启后出现control+D错误的解决
  3. 第十二节: EF的三种模式(二) 之 ModelFirst模式(SQLServer为例)
  4. FutureV接口CallableV接口的使用
  5. 【OpenCV】OpenCV实战从入门到精通之 -- 基本图像绘制
  6. pygame写的弹力球
  7. Leetcode 509. Fibonacci Number
  8. 如何激活Microsoft Office 2010?
  9. 产品经理面试问题及答案大全《一》
  10. 易飞ERP工作流解决方案之【第三方OA系统集成】
  11. java 图片缩放 模糊问题_java – PDFBox中的缩放图像模糊
  12. 全国哀悼日,网站变黑白完美兼容IE,亲测有效
  13. Android 多点触控
  14. 【Python web 开发】 bottle 简单教程 (四)
  15. Android 游戏引擎libgdx之Box2D Hello Box2D
  16. 3万字长文带你轻松入门视觉Transformer
  17. 安装微信小程序开发者工具
  18. python学习(二十一)
  19. keil 烧录时 Full Chip Erase Failed问题
  20. RSA分段加密/解密 nodejs 和java联调

热门文章

  1. 一文读懂 AVL 树
  2. PL/SQL Developer使用技巧总结
  3. php返回一个变量,PHP从另一个文件获取变量
  4. mysql 导入文件夹_MySQL-导入与导出
  5. android canvas_Android 如何实现气泡选择动画
  6. oracle未找到时区,Oracle ADF 未找到时区错误
  7. 7500 cpuz跑分 i5_核心硬盘 i5 7500性能测试_DIY攒机酷品测试-中关村在线
  8. python中merge函数怎么用_Python Merge函数原理及用法解析
  9. java的正则表达式 CPU_小心踩雷!一个小小的正则表达式竟把CPU拖垮......
  10. C++ 实现无向图的最小生成树Prim算法(附完整代码)