题目链接

坑死了,以为是K进制数,每一位可以是0-K之间的,其实是十进制,每一位最高为9,一直wa在这。。。。。。。

----------------------------------------------------------------------------------------------------------------------------------------------------

H国的身份证号码是一个N位的正整数(首位不能是0)。此外,由于防伪需要,一个N位正整数是合法的身份证号码当且仅当每位数字都小于等于K,并且任意相邻两位数字的乘积也小于等于K。

例如对于K=5, 101、211、210等都是合法的号码,而106、123、421等都是非法的号码。

给定一个正整数N以及K,H国总统想知道一共有多少个合法的号码可用。

对于100%的数据,1 ≤ N ≤ 1012,1 ≤ K ≤ 81

合法号码的总数。由于答案可能非常大,你只需要输出答案对109+7取模的结果。

-----------------------------------------------------------------------------------------------------------------------------------------------------

找完规律后,典型的矩阵快速幂

  1. #include <set>
  2. #include <map>
  3. #include <stack>
  4. #include <queue>
  5. #include <cmath>
  6. #include <vector>
  7. #include <string>
  8. #include <cstdio>
  9. #include <cstring>
  10. #include <cstdlib>
  11. #include <iostream>
  12. #include <algorithm>
  13.  
  14. #define MAX(a,b) ((a)>=(b)?(a):(b))
  15. #define MIN(a,b) ((a)<=(b)?(a):(b))
  16. #define OO 0x0fffffff
  17. using namespace std;
  18. typedef long long LL;
  19. const int N = ;
  20. const LL MOD = 1E9+;
  21. int k;
  22. struct Mat{
  23. int dim;
  24. LL data[N][N];
  25. Mat(int n){
  26. memset(data,,sizeof(data));
  27. for(int i=; i<=n; i++) for(int j=; j<=n; j++){
  28. if(i*j<=k) data[i][j]=;
  29. }
  30. dim = n+;
  31. }
  32. Mat(){ memset(data,,sizeof(data)); }
  33. LL* operator[] (size_t idx){ return data[idx];}
  34. friend Mat operator*(Mat& a,Mat& b){
  35. Mat ret;
  36. ret.dim = a.dim;
  37. for(int i=; i<ret.dim; i++) for(int j=; j<ret.dim; j++) for(int k=; k<ret.dim; k++){
  38. ret[i][j]+=a[i][k]*b[k][j];
  39. if(ret[i][j]>=MOD) ret[i][j]%=MOD;
  40. }
  41. return ret;
  42. }
  43. };
  44. int main(){
  45. LL n;
  46. while(scanf("%lld%d",&n,&k)!=EOF){
  47. if(n==) printf("%d\n",k);
  48. else{
  49. vector<int> dits;
  50. n--;
  51. while(n){
  52. if(n&) dits.push_back();
  53. else dits.push_back();
  54. n>>=;
  55. }
  56. Mat base(MIN(k,));
  57. Mat ans = base;
  58. for(int i=dits.size()-; i>=; i--){
  59. ans=ans*ans;
  60. if(dits[i]==) ans=ans*base;
  61. }
  62. LL result = ;
  63. for(int i=; i<ans.dim; i++) for(int j=; j<ans.dim; j++){
  64. result = (result + ans[i][j])%MOD;
  65. }
  66. printf("%lld\n",result);
  67. }
  68. }
  69. return ;
  70. }

hiho1560 - 矩阵快速幂的更多相关文章

  1. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  2. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  3. 51nod 1113 矩阵快速幂

    题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...

  4. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  5. HDU5950(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2 ...

  6. 51nod 1126 矩阵快速幂 水

    有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...

  7. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

  8. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  9. hdu4965 Fast Matrix Calculation (矩阵快速幂 结合律

    http://acm.hdu.edu.cn/showproblem.php?pid=4965 2014 Multi-University Training Contest 9 1006 Fast Ma ...

随机推荐

  1. java/javascript 时间操作工具类

    一.java 时间操作工具类 import org.springframework.util.StringUtils; import java.text.ParseException; import ...

  2. dedecms清空栏目后,新建ID不从1开始的解决方法

    在后台SQL运行器运行下面的语句,这样新建的栏目ID就从1开始了: ALTER TABLE `dede_arctype` AUTO_INCREMENT =1; (注意表名) 下面是文章的,运行后,发布 ...

  3. 移动互联网iOS工程师必须知道的三点

    如果十年磨一剑,那么现在起作为一名iOS工程师,以下三点你必须要知道: 1.现在开始学swift正是时候,永远不要怕晚 因为…新时代的程序语言Swift有很多优势,长江后浪推前浪,Swift上手快,开 ...

  4. Hihocoder1350-Binary Watch

    时间限制:10000ms单点时限:1000ms内存限制:256MB 描述 Consider a binary watch with 5 binary digits to display hours ( ...

  5. LeetCode Golang 5. 最长回文子串

    5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...

  6. Linux网络配置、文件及命令

    Linux的网络配置是曾一直是我学习Linux的埋骨之地,投入了大量的精力和心神但是自己的虚拟机就是联不了网.原来一个大意,我一躺就是一年半.在这里简单的谈谈我对网络的微微认识. VMware的联网模 ...

  7. kvm三个kernel相关的调优

    今天在杭州参加淘宝嘉年华技术沙龙,主题是虚拟化和云计算,三个讲演: 淘宝网子团分享淘宝kvm技术的使用 华为的杨晓伟介绍虚拟化技术 阿里云郑永升介绍弹性云计算技术 其中KVM 调优,三点值得关注的: ...

  8. 利用after和before伪类实现chrome浏览器tab选项卡斜边纯css无图制作笔记

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. [读书笔记] R语言实战 (六) 基本图形方法

    1.  条形图 barplot() #载入vcd包 library(vcd) #table函数提取各个维度计数 counts <- table(Arthritis$Improved) count ...

  10. debian 9 配置ati驱动

    可以参考debian wiki 1.识别自己显卡驱动 lspci -nn | grep VGA 2.添加源 # Debian "stretch" deb http://httpre ...