hdu 5564 Clarke and digits
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=5564
-----------------------------------------------------------------------------------------
刚读完题目感觉像是数位DP,然而仔细看了数据范围后感觉很不可做。
与数位DP题目对比可以发现 此题数据范围要大一些,却没有对每一位进行限制
于是便可以愉快地进行矩阵乘法优化DP啦
如果矩阵构造(将递推式转换为矩阵形式)还不熟练的话 可以参考
挑战程序设计竞赛(第2版) 3.4.2节
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int mod = 1e9 + , L = + ;
int t, l, r, m;
long long raw[L][L], tmp[L][L], a[L][L], b[L][L], f[L];
long long ans1, ans2;
void mul(long long A[L][L], long long B[L][L])
{
memset(tmp, , sizeof tmp);
for(int i = ; i < L; ++i)
for(int j = ; j < L; ++j)
{
for(int k = ; k < L; ++k)
tmp[i][j] += A[i][k] * B[k][j] % mod;
tmp[i][j] %= mod;
}
for(int i = ; i < L; ++i)
for(int j = ; j < L; ++j)
A[i][j] = tmp[i][j];
}
long long solve(int lim)
{
if(!lim)
return ;
if(lim == )
return ;
lim -= ;
for(int i = ; i < L; ++i)
for(int j = ; j < L; ++j)
a[i][j] = b[i][j] = raw[i][j];
while(lim)
{
if(lim & )
mul(a, b);
mul(b, b);
lim >>= ;
}
long long tans = ;
for(int i = ; i < L; ++i)
tans += a[][i] * f[i] % mod;
return tans % mod;
}
int main()
{
for(int i = ; i <= ; ++i)
f[i * + i % ] = ;
f[] = ;
scanf("%d", &t);
while(t--)
{
scanf("%d%d%d", &l, &r, &m);
memset(raw, , sizeof raw);
for(int i = ; i <= ; ++i)
for(int j = ; j <= ; ++j)
if(i + j != m)
{
for(int k = ; k < ; ++k)
{
raw[i * + (k * + i) % ][j * + k] = ;
if((k * + i) % == )
++raw[][j * + k];
}
}
raw[][] = ;
ans1 = solve(l - );
ans2 = solve(r);
printf("%lld\n", (ans2 - ans1 + mod) % mod);
}
return ;
}
hdu 5564 Clarke and digits的更多相关文章
- hdu 5564 Clarke and digits 矩阵快速幂优化数位dp
Clarke and digits Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5564 Clarke and digits 状压dp+矩阵加速
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5564 题意: 求长度在[L,R]范围,并且能整除7的整数的总数. 题解: 考虑最原始的想法: dp[ ...
- 【HDOJ】5564 Clarke and digits
DP+快速矩阵幂.注意base矩阵的初始化,不难. /* 5564 */ #include <iostream> #include <string> #include < ...
- HDU 5564:Clarke and digits 收获颇多的矩阵快速幂 + 前缀和
Clarke and digits Accepts: 16 Submissions: 29 Time Limit: 5000/3000 MS (Java/Others) Memory Limi ...
- HDU 5628 Clarke and math——卷积,dp,组合
HDU 5628 Clarke and math 本文属于一个总结了一堆做法的玩意...... 题目 简单的一个式子:给定$n,k,f(i)$,求 然后数据范围不重要,重要的是如何优化这个做法. 这个 ...
- hdu 5565 Clarke and baton 二分
Clarke and baton Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- hdu 5563 Clarke and five-pointed star 水题
Clarke and five-pointed star Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/show ...
- hdu 5465 Clarke and puzzle 二维线段树
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- hdu 5464 Clarke and problem dp
Clarke and problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...
随机推荐
- socket选项总结(setsockopt)
功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和选项的名称必须给出.为了操作套接字层的选项, ...
- [6期]Webshell提权服务器登录
这一期内容较少,分享一点资料给大家吧:https://www.bilibili.com/video/av27708518/?spm_id_from=333.788.b_636f6d6d656e74.9 ...
- 0x3f3f3f3f 0xbfbfbfbf 等的原理及应用
原理 0x的意思其实是十六进制,后面加的数其实就是一个十六进制数. 在十六进制中,我们知道a代表10,b代表11,c代表12,d代表13,e代表14,f代表15. 所以3f3f3f3f这个数用十进制数 ...
- Linux ssh的的用法
Linux ssh的的用法 ssh执行远程命令 1. 执行命令 1.执行单条命令 ubuntu@node1:~$ ssh ubuntu@172.16.10.102 hostname ubuntu@17 ...
- C#中out和ref的区别
来源:https://www.cnblogs.com/sunliyuan/p/5999045.html 首先,俩者都是按地址传递的,使用后都将改变原来参数的数值. 其次,ref可以把参数的数值传递进函 ...
- redis命令行命令
配置文件设置密码认证 修改redis.conf去掉#requirepass foobared前面的#,foobared就是密码,可以进行修改 redis命令设置密码认证config set requi ...
- Android线程间通信的几种实现方式
1. 通过Handler机制: private void one() { handler=new Handler(){ @Override public void handleMessage(Mess ...
- GeneXus笔记本——部分环境属性设置项
这些属性的设置是我们在做项目的过程中都会设置的属性 当然也因项目而异 这里也只是单纯的记录一下 知识库 属性设置“Maximun numeric length" 效果:设置数值型最大值 版本 ...
- 2019年 Java 面试题解析
2019年 Java 面试题解析 转载地址:https://www.cnblogs.com/Zz-maker/p/11193930.html 作者: Zz_maker 包含的模块: 本文分为十九个模块 ...
- 微信小程序(17)-- RSA加密 解密 加签 验签
RSA加密 解密 加签 验签 /** * 注:区分RSA私钥的类型,有pkcs1和pkcs8.pkcs8格式的私钥主要用于Java中 pkcs1格式: -----BEGIN RSA PRIVATE K ...