【DP】Codeforces Round #341 (Div. 2) E
来源:互联网 发布:淘宝象印官方旗舰店 编辑:程序博客网 时间:2024/04/20 02:43
问你用1-9拼一个mod x余k的数有多少种方法,
一开始脑抽了,从低位到高位做了(虽然这样做后发现是有循环规律的),但是发现异常难做,然后看了下题解原来是从高位往低位做了之后然后每次相当于余数乘十再加上1-9,所以构建余数矩阵f[i][(10*i)+x] += sum[x] 然后f矩阵做快速幂好了。。。
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>long long f[110][110],ans[110][110],tmp[110][110];int n,b,k,X,sum[11];using namespace std;void work(int x){for (int i=0;i<X;i++)ans[i][i]=1;while (x){if (x&1) {memset(tmp,0,sizeof(tmp));for (int i=0;i<X;i++)for (int j=0;j<X;j++)for (int k=0;k<X;k++){tmp[i][j]+=ans[i][k]*f[k][j];tmp[i][j]=tmp[i][j]%(1000000007);}for (int i=0;i<X;i++)for (int j=0;j<X;j++)ans[i][j]=tmp[i][j];}memset(tmp,0,sizeof(tmp));for (int i=0;i<X;i++)for (int j=0;j<X;j++)for (int k=0;k<X;k++){tmp[i][j]+=f[i][k]*f[k][j];tmp[i][j]=tmp[i][j]%(1000000007);}for (int i=0;i<X;i++)for (int j=0;j<X;j++)f[i][j]=tmp[i][j];x=x>>1;}}int main(){freopen("test.in","r",stdin);memset(f,0,sizeof(f));memset(ans,0,sizeof(ans));int x;scanf("%d%d%d%d",&n,&b,&k,&X);for (int i=1;i<=n;i++){scanf("%d",&x);sum[x]++;}for (int i=0;i<X;i++)for (int j=1;j<=9;j++)f[i][(i*10+j)%X]+=sum[j];work(b);printf("%d",ans[0][k]%1000000007);return 0;}
0 0
- 【DP】Codeforces Round #341 (Div. 2) E
- dp+Codeforces Round #274 (Div. 2)E
- Codeforces Round #316 (Div. 2) E dp
- Codeforces Round #371 (Div. 2) E dp
- Codeforces Round #376 (Div. 2) E dp
- Codeforces Round #261 (Div. 2) E. Pashmak and Graph【DP】
- Codeforces Round #261 (Div. 2) E. Pashmak and Graph DP
- Codeforces Round #265 (Div. 2)E(数位dp)
- Codeforces Round #113 (Div. 2) E. Tetrahedron dp
- Codeforces Round #277.5 (Div. 2) E. Hiking(二分 DP)
- Codeforces Round #291 (Div. 2)E(DP+矩阵)
- Codeforces Round #117 (Div. 2)E---Wooden Fence(dp)
- Codeforces Round #302 (Div. 2) E. Remembering Strings(状压dp)
- Codeforces Round #316 (Div. 2) E. Pig and Palindromes DP
- Codeforces Round #316 (Div. 2) E. Pig and Palindromes (DP)
- Codeforces Round #316 (Div. 2) E. Pig and Palindromes dp
- Codeforces Round #344 (Div. 2) E - Product Sum (斜率dp)
- Codeforces Round #353 (Div. 2) E 线段树+dp
- 【Android开发小记--5】动画--两张图片轮回翻转
- 今日的第一个博客
- 数据结构基础之链表
- 求能覆盖到所有点的最少集合情况(超时题,须优化)
- HDU 4518 解题报告
- 【DP】Codeforces Round #341 (Div. 2) E
- N皇后
- 关于getline
- 走过2015,展望2016
- 安卓开发——DisplayMetrics类
- FZUOJ 1402 猪的安家 (中国剩余定理 互质)
- 每个痛苦的过程都是你进步的阶梯
- HDU 2647 Reward(拓扑排序)
- 初来乍到,发博一篇,关于Fortran和Matlab