题目链接

坑死了,以为是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取模的结果。

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

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

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #define MAX(a,b) ((a)>=(b)?(a):(b))
#define MIN(a,b) ((a)<=(b)?(a):(b))
#define OO 0x0fffffff
using namespace std;
typedef long long LL;
const int N = ;
const LL MOD = 1E9+;
int k;
struct Mat{
int dim;
LL data[N][N];
Mat(int n){
memset(data,,sizeof(data));
for(int i=; i<=n; i++) for(int j=; j<=n; j++){
if(i*j<=k) data[i][j]=;
}
dim = n+;
}
Mat(){ memset(data,,sizeof(data)); }
LL* operator[] (size_t idx){ return data[idx];}
friend Mat operator*(Mat& a,Mat& b){
Mat ret;
ret.dim = a.dim;
for(int i=; i<ret.dim; i++) for(int j=; j<ret.dim; j++) for(int k=; k<ret.dim; k++){
ret[i][j]+=a[i][k]*b[k][j];
if(ret[i][j]>=MOD) ret[i][j]%=MOD;
}
return ret;
}
};
int main(){
LL n;
while(scanf("%lld%d",&n,&k)!=EOF){
if(n==) printf("%d\n",k);
else{
vector<int> dits;
n--;
while(n){
if(n&) dits.push_back();
else dits.push_back();
n>>=;
}
Mat base(MIN(k,));
Mat ans = base;
for(int i=dits.size()-; i>=; i--){
ans=ans*ans;
if(dits[i]==) ans=ans*base;
}
LL result = ;
for(int i=; i<ans.dim; i++) for(int j=; j<ans.dim; j++){
result = (result + ans[i][j])%MOD;
}
printf("%lld\n",result);
}
}
return ;
}

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. 解析RecyclerView(2)——带顶部View和底部View的RecyclerView

    在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...

  2. 一个vue的全局提示框组件

    <template> <!-- 全局提示框 --> <div v-show="visible" class="dialog-tips dia ...

  3. OracleRef游标

    提到个思考:怎样让游标作为参数传递? 解决这个问题就需要用到 REF Cursor . 1,什么是 REF游标?  动态关联结果集的临时对象.即在运行的时候动态决定执行查询.   2,REF 游标有什 ...

  4. RAP开发入门-运行第一个HelloWorld(二)

    环境搭建好了之后我们就可以照惯例运行第一个helloworld程序了. (ps:这里钉几个资料吧 官网开发指导:http://help.eclipse.org/indigo/index.jsp?top ...

  5. solarwinds之配置系统管理(System manager)

    配置windows的 1.  打开System Manager   2.  点击new新加一个接口   3.  选择要监控的资源   4.  确认好自己要监控的资源后如下   5.  这里以监控内存使 ...

  6. windows下Keras框架搭建

    1. 安装Anaconda https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ conda info来查询安装信息 conda list可以查 ...

  7. 细数ZBrush这些年的心路历程

    ZBrush 的出现,带来了一场3D造型的革命.它完全颠覆了传统三维设计工具的工作模式,将3D空间绘图这种全新的设计理念呈现在广大设计师面前,强大的雕塑建模功能和颜色绘制功能释放了艺术家的灵感,让设计 ...

  8. Kattis - How Many Digits?

    How Many Digits? Often times it is sufficient to know the rough size of a number, rather than its ex ...

  9. css3背景渐变以及图片混合渲染模式(一)

    一.CSS3 渐变(Gradients):CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡. 以前,你必须使用图像来实现这些效果.但是,通过使用 CSS3 渐变(g ...

  10. 路飞学城Python-Day40(第四模块复习题)

    数据库 一.简答题 1.说说你所知道的MySQL数据库存储引擎,InnoDB存储引擎和MyISM存储引擎的区别? 1.InnoDB存储引擎(MySQL默认存储引擎),支持事务,其设计目标主要面向联机事 ...