hdu5628(Dirichlet convolution)
来源:互联网 发布:mac外接光驱 编辑:程序博客网 时间:2024/06/03 08:32
以前打的某一场bestcoder的题,不会,今天学习了一下狄雷克卷积(好像没有想象的辣么难,可能写的是模版题)回头写一写。
const int maxn = 10005;int f[maxn],g[maxn],h[maxn];for(int i = 1;i * i <= n;i++){ for(int j = i;i * j <= n;j++){ if(i == j) h[i * j] += f[i] * g[j]; else h[i * j] += f[i] * g[j] + f[j] * g[i]; }}
代码如下:
//// main.cpp// hdu5628//// Created by 黄宇凡 on 10/20/16.// Copyright © 2016 黄宇凡. All rights reserved.//#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const LL mod = 1e9 + 7;const int maxn = 100000 + 5;LL f[maxn],g[maxn],h[maxn],tmp[maxn];int n,k;void solve(){ while(k){ if(k % 2){ for(int i = 1;i <= n;i++) tmp[i] = 0; for(int i = 1;i * i <= n;i++){ for(int j = i;i * j <= n;j++){ if(i == j) tmp[i * j] = (tmp[i * j] + g[i] * h[j] % mod) % mod; else{ tmp[i * j] = (tmp[i * j] + g[i] * h[j] % mod + g[j] * h[i] % mod) % mod; } } } for(int i = 1;i <= n;i++) h[i] = tmp[i]; } for(int i = 1;i <= n;i++) tmp[i] = 0; for(int i = 1;i * i <= n;i++){ for(int j = i;i * j <= n;j++){ if(i == j) tmp[i * j] = (tmp[i * j] + g[i] * g[j] % mod) % mod; else{ tmp[i * j] = (tmp[i * j] + g[i] * g[j] % mod + g[j] * g[i] % mod) % mod; } } } for(int i = 1;i <= n;i++) g[i] = tmp[i]; k >>= 1; } for(int i = 1;i <= n;i++) tmp[i] = 0; for(int i = 1;i * i <= n;i++){ for(int j = i;i * j <= n;j++){ if(i == j) tmp[i * j] = (tmp[i * j] + f[i] * h[j] % mod) % mod; else{ tmp[i * j] = (tmp[i * j] + f[i] * h[j] % mod + f[j] * h[i] % mod) % mod; } } } for(int i = 1;i <= n;i++) h[i] = tmp[i];}int main(int argc, const char * argv[]) { int T; cin >> T; while(T--){ cin >> n >> k; for(int i = 1;i <= n;i++){ scanf("%I64d",f + i); g[i] = 1; h[i] = 0; } h[1] = 1; solve(); for(int i = 1;i <= n;i++){ printf("%I64d%c",h[i],i == n ? '\n' : ' '); } } return 0;}
0 0
- hdu5628(Dirichlet convolution)
- [hdu5628]Clarke and math(dirichlet卷积)
- 51nod1769(dirichlet convolution)
- Convolution
- Convolution
- Convolution
- Dirichlet Process & Dirichlet Distribution
- linear convolution/periodic convolution/circular convolution
- 狄利克雷卷积 【HDU5628】Clarke and math
- Separable convolution
- Convolution Reverb
- convolution layer
- convolution theorem
- Dilated Convolution
- dilation convolution
- dilated convolution
- Convolution Layer
- deformable convolution
- Oracle 常用性能监控SQL语句
- Android 百度地图经纬度转换成地址
- Java面试中异常常见问题
- vagrant配置linux以及nginx开发环境
- JAVA学习·20/10/2016·继承与多态
- hdu5628(Dirichlet convolution)
- Android Environment类的接口详解
- 解决Unsupported major.minor version 52.0错误
- 代码混淆
- docker非常好的文章链接
- 2016/10/20 1002. 字符串匹配
- Android.mk详解
- 仿微信中地图开发移动地图获取中心点功能
- hibernate中native、identity和increment等主键的区别