hdu 5564 Clarke and digits 矩阵快速幂优化数位dp
Clarke and digits
Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
He wants to know the number of positive integers which have a length in [l,r] and are divisible by 7 and the sum of any adjacent digits can not be k.
Each test case contains three integers l,r,k(1≤l≤r≤109,0≤k≤18).
1 2 5
2 3 5
125
Hint:
At the first sample there are 13 number $7,21,28,35,42,49,56,63,70,77,84,91,98$ satisfied.
思路:显然数位,dp[ i ][ j ][ pre ]+=dp[ i-1 ][ j1 ][ pre1 ] &&pre1+pre!=k&&0<=k<=9&&(j1%10+pre)%7==j
但是r太大,考虑矩阵优化;
- #pragma comment(linker, "/STACK:1024000000,1024000000")
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<string>
- #include<queue>
- #include<algorithm>
- #include<stack>
- #include<cstring>
- #include<vector>
- #include<list>
- #include<bitset>
- #include<set>
- #include<map>
- #include<time.h>
- using namespace std;
- #define LL long long
- #define bug(x) cout<<"bug"<<x<<endl;
- const int N=5e4+,M=1e6+,inf=1e9+,MOD=1e9+;
- const LL INF=1e18+,mod=1e9+;
- const double eps=(1e-),pi=(*atan(1.0));
- struct Matrix
- {
- const static int row=;
- int a[row][row];//矩阵大小根据需求修改
- Matrix()
- {
- memset(a,,sizeof(a));
- }
- void init()
- {
- for(int i=;i<row;i++)
- for(int j=;j<row;j++)
- a[i][j]=(i==j);
- }
- Matrix operator + (const Matrix &B)const
- {
- Matrix C;
- for(int i=;i<row;i++)
- for(int j=;j<row;j++)
- C.a[i][j]=(a[i][j]+B.a[i][j])%MOD;
- return C;
- }
- Matrix operator * (const Matrix &B)const
- {
- Matrix C;
- for(int i=;i<row;i++)
- for(int k=;k<row;k++)
- for(int j=;j<row;j++)
- C.a[i][j]=(C.a[i][j]+1LL*a[i][k]*B.a[k][j])%MOD;
- return C;
- }
- Matrix operator ^ (const int &t)const
- {
- Matrix A=(*this),res;
- res.init();
- int p=t;
- while(p)
- {
- if(p&)res=res*A;
- A=A*A;
- p>>=;
- }
- return res;
- }
- };
- Matrix base,one;
- void init(int k)
- {
- memset(base.a,,sizeof(base.a));
- for(int i=;i<;i++)
- {
- int x=(i/);
- int y=(i%);
- for(int j=;j<;j++)
- {
- int x1=j/;
- int y1=j%;
- if((y+x1*)%==x&&y1+y!=k)
- base.a[j][i]=;
- }
- }
- for(int i=;i<;i++)base.a[i][]=;
- base.a[][]=;
- }
- int main()
- {
- memset(one.a,,sizeof(one.a));
- for(int i=;i<;i++)one.a[][(i%)*+i]=;
- int T;
- scanf("%d",&T);
- while(T--)
- {
- int l,r,k;
- scanf("%d%d%d",&l,&r,&k);
- init(k);
- Matrix ansr=one*(base^(r));
- Matrix ansl=one*(base^(l-));
- LL out=ansr.a[][]-ansl.a[][];
- out=(out%mod+mod)%mod;
- printf("%lld\n",out);
- }
- return ;
- }
hdu 5564 Clarke and digits 矩阵快速幂优化数位dp的更多相关文章
- POJ 3744 【矩阵快速幂优化 概率DP】
搞懂了什么是矩阵快速幂优化.... 这道题的重点不是DP. /* 题意: 小明要走某条路,按照个人兴致,向前走一步的概率是p,向前跳两步的概率是1-p,但是地上有地雷,给了地雷的x坐标,(一维),求小 ...
- poj 3744 Scout YYF I (矩阵快速幂 优化 概率dp)
题目链接 分析&&题意来自 : http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710586.html 题意: 在一条不满地雷的 ...
- POJ 3744 Scout YYF I(矩阵快速幂优化+概率dp)
http://poj.org/problem?id=3744 题意: 现在有个屌丝要穿越一个雷区,雷分布在一条直线上,但是分布的范围很大,现在这个屌丝从1出发,p的概率往前走1步,1-p的概率往前走2 ...
- HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...
- hdu 5667 BestCoder Round #80 矩阵快速幂
Sequence Accepts: 59 Submissions: 650 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)
传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...
- 2018.10.22 bzoj1009: [HNOI2008]GT考试(kmp+矩阵快速幂优化dp)
传送门 f[i][j]f[i][j]f[i][j]表示从状态"匹配了前i位"转移到"匹配了前j位"的方案数. 这个东西单次是可以通过跳kmp的fail数组得到的 ...
- 2018.10.16 uoj#340. 【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂优化dp)
传送门 一道不错的矩阵快速幂优化dpdpdp. 设f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]表示前iii轮第iii轮还有jjj个一滴血的,kkk个两滴血的,lll个 ...
- BZOJ4547 Hdu5171 小奇的集合 【矩阵快速幂优化递推】
BZOJ4547 Hdu5171 小奇的集合 Description 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值.(数据保证这个 ...
随机推荐
- awt
public class MouseTest extends Frame{ private static final long serialVersionUID = 54376853365952763 ...
- Python cffi学习
cffi是连接Python与c的桥梁,可实现在Python中调用c文件.cffi为c语言的外部接口,在Python中使用该接口可以实现在Python中使用外部c文件的数据结构及函数. 由于资料较少,所 ...
- 代码中特殊的注释技术——TODO、FIXME和XXX的用处(转)
1.声明 本篇转自博客:http://blog.csdn.net/reille/ 2.转载内容 2.1.前言 今天在阅读 Qt Creator 的源代码时,发现一些注释中有 FIXME 英文单词,用英 ...
- 使用APScheduler启动Django服务时自动运行脚本(可设置定时运行)
Django搭建的服务器一般都用作WEB网站进行访问,通常的形式是用户访问网站或点击按钮发送请求,Django检测到请求后进行相应的试图函数处理后返回页面给用户. 但是,我们有时会需要有一些后台自动运 ...
- byte转bit
由于项目需要,传过来的数据是高位到低位的Byte,需要输出低位到高位的bool数组. public static bool[] getBits(byte[] byt) { bool[] ret = n ...
- 有没有无痛无害的人体成像方法?OCT(光学相干断层扫描)了解一下
关于之前推送的胸片和CT有很多的小伙伴关心射线对人体的伤害的问题,在医学检查射线的强度和剂量已经有严格的标准,偶尔进行一次CT扫描是没有问题的,那么有没有一种完全无害的扫描检查呢?今天小编就给大家介绍 ...
- Cocos Creator两个类相互引用(调用)
如果两个类相互引用,脚本加载阶段就会出现循环引用,循环引用将导致脚本加载出错:///////////Game.jsvar Item = require("Item");var Ga ...
- UVA 11582 Colossal Fibonacci Numbers(数学)
Colossal Fibonacci Numbers 想先说下最近的状态吧,已经考完试了,这个暑假也应该是最后刷题的暑假了,打完今年acm就应该会退了,但是还什么都不会呢? +_+ 所以这个暑假,一定 ...
- windows程序设计 获取系统文件路径
获取系统文件路径,打印到txt文件中. #include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hP ...
- SV coverage
covergroup是对coverage model的一种包装,每个covergroup可以包含: 1) sync event来触发采样, 2) 很多coverpoint, 3) cross cove ...