CF div2 341-E
来源:互联网 发布:以史为鉴 可以知兴替 编辑:程序博客网 时间:2024/05/17 21:40
感觉自己太弱了……cf div2都只能做3题哈哈,下半年区域赛没有着落~
这题看到就感觉变量很多,可能是因为前段时间做了数论的题,看到这题想用剩余定理;
想通过找规律,发现循环节,每变化一次对模数的变化,来进行统计,问题在于1.可能没有规律2.可能还是要一种情况一种情况算
看了答案之后发现,可以用矩阵优化的DP,真是厉害,因为比如前n个模x的值已知,*10之后再加一个数,模x就也好算了
要充分利用x比较小的条件,利用模运算……(当时自己为什么没想到)
代码参考了http://blog.csdn.net/jzhang1/article/details/50628041#
矩阵快速幂的模板还是很棒的
如果想到了dp的方法,F[i][(c * 10 + num) % x] += F[i - 1][c]
想用矩阵快速幂来求得话,想要使F[I][K] = F[0][K] *( MATRIX^B)显然不靠谱,所以要找到F[I] = F[0] * (MATRIX^B)
然后F[I] = F[I-1] * MATRIX,然后找到F[I-1][K] 与 MATRIX的对应元素的关系,做一个预处理,就好了。
上参考别人代码后自己的代码……
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#define Mod 1000000007using namespace std;int p,k,no_box,no_digit;//矩阵快速幂 int cnt[10];struct Matrix { //这样的拷贝能不能做到深拷贝?!? long long val[105][105]; //可能会超出int Matrix () {memset(val,0,sizeof(val));} //无参数构造函数 friend Matrix operator *(Matrix x,Matrix y) { Matrix Ans; for(int i = 0;i < p;i ++) for(int j = 0;j < p;j ++) for(int k = 0;k < p;k ++){ Ans.val[i][j] += x.val[i][k] * y.val[k][j]; Ans.val[i][j] %= Mod; } return Ans; } friend Matrix operator^(Matrix X,int Y) { Matrix Ans; for(int I = 0;I <= p - 1;I ++) Ans.val[I][I] = 1; while(Y > 0) { if(Y % 2 == 1) Ans = Ans * X; X = X * X; Y = Y >> 1; } return Ans; } }A,B;int main(){int tem;cin >> no_digit >> no_box >> k >> p;memset(cnt,0,sizeof(cnt));for (int i = 0; i < no_digit; i++){cin >> tem;cnt[tem]++;}for(int i = 0; i < p; i++)for(int j = 0; j < p; j++)for(int k = 1; k <= 9; k++)if (cnt[k] > 0 && ((i * 10 + k) % p) == j)B.val[i][j] += cnt[k]; A.val[0][0] = 1;//初始条件(要想清楚,或者先算出1时的情景) A = A * (B^no_box);cout << A.val[0][k] << '\n';return 0;}
0 0
- CF div2 341-E
- CF #148 DIV2 E
- cf#ff(div2)E
- CF 260div2 E
- cf 151.div2 E Blood Cousins Return
- cf 167.div2 E.Dima and Horses
- CF 177(div2) E(greedy )
- CF 189DIV2 E DP + 斜率优化
- CF 203 div2 E. Wrong Floyd 图论
- CF 277 Div2 E LIS of Sequence
- CF 316div2 E.Pig and Palindromes
- CF Educational#21 Div2 E Solution
- CF Round 418(div2) E题解
- CF 232 div2 E On Changing Tree 树状数组
- CF DIV2 236E Strictly Positive Matrix(强连通)
- cf 267 div2 E Alex and Complicated Task
- CF 297 div2 E. Anya and Cubes (hash+dfs)
- E. Paths and Trees (CF 303 div2)最短路
- php 自定义错误处理器 与 自定义异常处理器
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- struts2零配置参考示例
- 【spark】spark word count例子
- JNIEnv和Dalvik的JavaVM的关系
- CF div2 341-E
- 数组
- Error when loading the SDK:Error parsing ../../devices.xml
- ios程序员6级考试(答案和解释)
- Android 事件分发机制源码和实例解析
- 【NOI(P)2013模拟】秘密任务
- 工作中用到的FFmpeg命令
- C语言之linux内核实现位数高低位互换
- Android系统移植(三)