Gym100025K
矩阵快速幂
设答案为f(i)
举个例子:
当i==2时,包含0的值有:10,20,30,40,50,60,70,80,90,100;0的个数为11,f(2)=11;
i==3时;可以从i==2的情况递推,
第一步:i==2时的数据范围:1-100;在这100个数后面补0;补0后,这些数在1-1000的范围之内,合法,0的个数增加了100个,也就是10^(i-1);
第二步:把i==2时包含0的有效值拿出来,在这些值后面补0,1,2,3,4,5,6,7,8,9;
比如70;补数之后就成了:700,701,702,703,704,705,706,707,708,709;这样70里面0的个数就被计算了10次。至于700里面由于后面补零增加的一个0,这个可以发现已经在第一步中计算过了。因此加上10*f(i-1);
但要知道100后面补数的话,1001,1003,1003,1004,1005,1006,1007,1008,1009都是不合法的。不合法的情况有9种,每种里面包含0的个数为(i-1)。
因此递推式为f(i)=10*f(i-1)+10^(i-1)-9*(i-1);
接下来就可以愉快的矩阵快速幂了。
#include<bits/stdc++.h>
using namespace std;
int f[];
#define ll long long
ll mod;
ll res[][];
ll ans[];
void Ans()
{
ll tmp[]={};
for(int i=;i<;++i)
{
for(int j=;j<;++j)
{
tmp[i]=(tmp[i]+res[i][j]*ans[j])%mod;;
}
}
for(int i=;i<;++i)ans[i]=tmp[i];
}
void A()
{
ll tmp[][]={};
for(int i=;i<;++i)
{
for(int j=;j<;++j)
{
for(int k=;k<;++k)tmp[i][j]=(tmp[i][j]+res[i][k]*res[k][j])%mod;
}
}
for(int i=;i<;++i)for(int j=;j<;++j)res[i][j]=tmp[i][j];
}
void init(ll n)
{
--n;
res[][]=%mod;res[][]=%mod;res[][]=(-%mod+mod)%mod;
res[][]=%mod;
res[][]=res[][]=;
res[][]=;
for(int i=;i<;++i)ans[i]=;
while(n){
if(n&)Ans();
n>>=;A();
}
cout<<ans[]<<endl;
}
int main()
{
/*
f[1]=1;
for(int i=2;i<=6;++i){
f[i]=10*f[i-1]+pow(10,i-1)-9*(i-1);
cout<<f[i]<<endl;
}
*/
freopen("zeroes.in","r",stdin);
freopen("zeroes.out","w",stdout);
ll k;
cin>>k>>mod;
if(mod==)cout<<<<endl;
else init(k);
}
Gym100025K的更多相关文章
随机推荐
- map与pagelayout同步新方法
本文转自: http://hi.baidu.com/murphy1314/blog/item/3d3144f319b19dcf0a46e0a4.html 前天写的那个MapControl和Pagela ...
- linux yum list、search、-y、install、update、remove、grouplist、groupinstall、groupremove
redhat使用yum需要付费yum安装的也是rpm包 centos的网络yum源默认已经配置好了,连接的是centos官方yum源,在国外,网速慢 yum源配置在/etc/yum.repos.d下 ...
- 1finally与return、exit()
public class TestException { public static void main(String[] args) { String[] str = {"1", ...
- ahjesus Axure RP 8.0注册码,亲测可用
ahjesus Axure RP 8.0注册码 ahjesus Axure RP 8.0注册码 用户名:aaa注册码:2GQrt5XHYY7SBK/4b22Gm4Dh8alaR0/0k3gEN5h7F ...
- 扩展LV手记
情景概览 系统:CentOS Linux release 7.4.1708 (Core) 磁盘情况: 目标:将sda3扩展到sda2下的centos-root虚拟盘上 操作步骤 1.建立新的PV # ...
- ExpressRoute 线路预配工作流和线路状态
本页从较高层面引导你完成服务预配和路由配置工作流. 下图和相应的步骤说明了预配端到端 ExpressRoute 线路所要执行的任务. 使用 PowerShell 配置 ExpressRoute 线路. ...
- Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器
修改root用户密码 打开终端,输入 sudo passwd root 指令: 安装SSH服务 ssh默认端口号是22,可以在/etc/ssh/sshd_config文件中修改 查看服务器否开启:ne ...
- 原生JS 将canvas生成图片
核心代码: <script type="text/javascript"> // Converts image to canvas; returns new canva ...
- HDU1407 测试你是否和LTC水平一样高
题目大意:给出一个num,计算方程x^2+y^2+z^2 = num的第一个正整数解(字典序),0 < num <= 10000. 方法参考了网上的博客,自己打了一波,发现还有很多不懂的地 ...
- ijcai statistics