Codeforces 621E Wet Shark and Blocks【Dp+矩阵快速幂】
来源:互联网 发布:淘粉吧和淘宝的关系 编辑:程序博客网 时间:2024/05/22 08:15
题目大意:
给你N个数,b个块,每个块都是n个数,且都一样,现在让你从每个块取一个数,并且按序拼接在一起之后%x==k的方案数。
按序拼接:第一个块取的数是i,第二个块取得数是j,第三个块取的数是k,那么按序拼接在一起得到的数就是ijk.
思路:
1、
统计方案数,考虑dp,不难想到设定dp【i】【j】表示进行到第i个块,所取数据%x==j的方案数。
那么就有:
dp【i】【(j*10+l)%m】+=dp【i-1】【j】*num【l】.表示当前这个块取了数字l拼接到最后的方案数转移情况。
观察到b有1e9辣么大。那么可以使用矩阵快速幂进行优化。
2、矩阵的设定:
对于第一个矩阵中的数据,要根据实际情况决定。
Ac代码:
#include<stdio.h>#include<string.h>using namespace std;#define mod 1000000007#define ll __int64typedef struct Matrix{ ll mat[102][102];}matrix;matrix A,B,tmp;ll num[15];ll n,b,x,m;Matrix matrix_mul(matrix a,matrix b){ matrix c; memset(c.mat,0,sizeof(c.mat)); ll i,j,k; for(ll i=0;i<m;i++) { for(ll j=0;j<m;j++) { for(ll k=0;k<m;k++) { c.mat[i][j]=(c.mat[i][j]+(a.mat[i][k]*b.mat[k][j])%mod)%mod; } } } return c;}Matrix matrix_quick_power(matrix a,ll k)//矩阵快速幂0.0{ matrix b; memset(b.mat,0,sizeof(b.mat)); for(ll i=0;i<m;i++) b.mat[i][i]=1;//单位矩阵b while(k) { if(k%2==1) { b=matrix_mul(a,b); k-=1; } else { a=matrix_mul(a,a); k/=2; } } return b;}int main(){ while(~scanf("%I64d%I64d%I64d%I64d",&n,&b,&x,&m)) { memset(tmp.mat,0,sizeof(tmp.mat)); memset(A.mat,0,sizeof(A.mat)); memset(num,0,sizeof(num)); for(ll i=1;i<=n;i++) { ll x;scanf("%I64d",&x); num[x]++; } for(ll i=0;i<m;i++) { for(ll j=0;j<m;j++) { for(ll l=1;l<=9;l++) { ll tmpnum=j*10+l; tmpnum%=m; if(tmpnum==i) { A.mat[i][j]+=num[l]; } } } } for(ll i=0;i<m;i++) { for(ll j=1;j<=9;j++) { if(j%m==i) { tmp.mat[i][0]+=num[j]; } } } B=matrix_quick_power(A,b-1); B=matrix_mul(B,tmp); printf("%I64d\n",B.mat[x][0]); }}
0 0
- Codeforces 621E Wet Shark and Blocks【Dp+矩阵快速幂】
- CodeForces 621 E.Wet Shark and Blocks(dp+矩阵快速幂)
- Codeforces 621E Wet Shark and Blocks 【矩阵加速dp】
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks(dp + 矩阵快速幂)
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks(DP+矩阵快速幂)
- Codeforces #341 E. Wet Shark and Blocks dp 矩阵优化
- Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
- Codeforces #341 div 2 E. Wet Shark and Blocks(矩阵快速幂)
- cf#341-E. Wet Shark and Blocks --DP+矩阵快速幂
- Codeforces 621 E Wet Shark and Blocks
- CodeForces 621E Wet Shark and Blocks
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks(矩阵优化DP)
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks(矩阵优化DP)★
- 【38.24%】【codeforces 621E】 Wet Shark and Blocks
- codeforces 621E Wet Shack and blocks dp+矩阵幂优化!
- 快速矩阵幂 Codeforces621E Wet Shark and Blocks
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks
- 未来是移动app还是小程序?
- usaco Shaping Regions
- 点击小图查看大图jQuery插件FancyBox魔幻灯箱
- Servlet
- Dom4j解析XML文本,遍历指定节点下的节点内容和属性,并存入List<Map<String,Object>
- Codeforces 621E Wet Shark and Blocks【Dp+矩阵快速幂】
- 【笔记】An ffmpeg and SDL Tutorial 02《视频播放》
- 一洽客服客户试用转化率100%
- setInterval设置停止和循环
- Web前端——Javascript复习(数组)
- 前端小白进阶Day5-优化卡片
- C++中的头文件(.h)和源文件(.cc)
- Android插件学习汇总(持续更新)
- Android实现手势检测