[51nod1773][A国的贸易][fwt]解题报告
来源:互联网 发布:js 防止sql注入 编辑:程序博客网 时间:2024/06/05 23:52
传送门 51nod1773
题意
给定序列
给定
分析
由题意有
变一下,
于是变成了异或卷积的形式
构造数组
然后卷积异或就好了
记得快速幂
(记得写读入输出优化,我挂在这上面了
关于fwt,推荐riteme的blog riteme orz
代码
#include <cstdio>#include <algorithm>#include <iostream>#include <cmath>#include <cstring>using namespace std;typedef long long ll;const int N = (1 << 20) | 1;const int mod = 1e9 + 7;const int inv = 5e8 + 4;int A[N], B[N];int n, t;int getint(){ int x = 0, f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); } while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); return x * f;}void print(int x) { int num = 0; char c[15]; while (x) c[++ num] = (x % 10) + 48, x /= 10; while (num) putchar(c[num--]); putchar(' '); }int inc(int a, int b){ return a + b - (a + b >= mod ? mod : 0);}void fwt(int *a, int len){ int b[len]; for (int dis = 2; dis <= len; dis <<= 1) { for (int i = 0; i < len; i += dis) { int mid = dis >> 1; for (int j = 0; j < mid; j ++) { b[i + j] = inc(a[i + j], a[i + mid + j]); b[i + j + mid] = inc(a[i + j], mod - a[i + j + mid]); } } for (int i = 0; i < len; i ++) a[i] = b[i]; }}void ifwt(int *a, int len){ int b[len]; for (int dis = 2; dis <= len; dis <<= 1) { for (int i = 0; i < len; i += dis) { int mid = dis >> 1; for (int j = 0; j < mid; j ++) { b[i + j] = (ll) inc(a[i + j], a[i + mid + j]) * inv % mod; b[i + j + mid] = (ll) inc(a[i + j], mod - a[i + j + mid]) * inv % mod; } } for (int i = 0; i < len; i ++) a[i] = b[i]; }}void pow(int b){ int ret[n]; for (int i = 0; i < n; i ++) ret[i] = 1; while (b) { if (b & 1) for (int i = 0; i < n; i ++) ret[i] = (ll) ret[i] * B[i] % mod; b >>= 1; for (int i = 0; i < n; i ++) B[i] = (ll) B[i] * B[i] % mod; } for (int i = 0; i < n; i ++) B[i] = ret[i];}int main(){ n = getint(); t = getint(); n = (1 << n); for (int i = 0; i < n; i ++) A[i] = getint(); for (int i = 1; i < n; i <<= 1) B[i] = 1; B[0] = 1; fwt(A, n); fwt(B, n); pow(t); for (int i = 0; i < n; i ++) A[i] = (ll) A[i] * B[i] % mod; ifwt(A, n); for (int i = 0; i < n; i ++) print(A[i]); return 0;}
阅读全文
0 0
- [51nod1773][A国的贸易][fwt]解题报告
- [FWT] 51Nod 算法马拉松26 A A国的贸易
- [FWT] 51nod 算法马拉松26 A. A国的贸易
- 最优贸易解题报告
- 51Nod-1773-A国的贸易
- 解题报告:HDU_5909:Tree Cutting 树上FWT
- NOIP2009 提高组 最优贸易 解题报告
- 【Noip 2009】 最优贸易 解题报告
- Noip 2009 解题报告(潜伏着,Hankson的趣味题,最优贸易,靶形数独)
- A - SnowflakeSnowSnowflakes解题报告
- NOIP2009解题报告(C/C++)(潜伏者)(Hankson的趣味题)(最优贸易)(靶形数独)
- NOIP 2009 解题报告(潜伏者,hankson的趣味题,最有贸易,靶形数独)
- A - A+B(解题报告)
- A+B Coming 解题报告
- USACO A Game解题报告
- 解题报告 codeforces 242A
- USACO A Game 解题报告
- codeforces 1A 解题报告
- Lambda表达式
- Educational Codeforces Round 25 A. Binary Protocol
- C#编程入门_数组_6
- 数据结构-数组
- 快速搞定flex布局
- [51nod1773][A国的贸易][fwt]解题报告
- Activity的几个主要函数
- 随你而舞
- 解决Error:java: 无效的源发行版: 1.8
- Lua CJSON安装和使用
- Android 系统服务之 ContentService
- 6.0权限问题
- jsp多行注释,java注释
- tensorflow_Faster rcnn问题解决