题目链接

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的更多相关文章

  1. hdu 5564 Clarke and digits 矩阵快速幂优化数位dp

    Clarke and digits Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  2. HDU 5564 Clarke and digits 状压dp+矩阵加速

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5564 题意: 求长度在[L,R]范围,并且能整除7的整数的总数. 题解: 考虑最原始的想法: dp[ ...

  3. 【HDOJ】5564 Clarke and digits

    DP+快速矩阵幂.注意base矩阵的初始化,不难. /* 5564 */ #include <iostream> #include <string> #include < ...

  4. HDU 5564:Clarke and digits 收获颇多的矩阵快速幂 + 前缀和

    Clarke and digits  Accepts: 16  Submissions: 29  Time Limit: 5000/3000 MS (Java/Others)  Memory Limi ...

  5. HDU 5628 Clarke and math——卷积,dp,组合

    HDU 5628 Clarke and math 本文属于一个总结了一堆做法的玩意...... 题目 简单的一个式子:给定$n,k,f(i)$,求 然后数据范围不重要,重要的是如何优化这个做法. 这个 ...

  6. hdu 5565 Clarke and baton 二分

    Clarke and baton Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  7. 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 ...

  8. hdu 5465 Clarke and puzzle 二维线段树

    Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  9. hdu 5464 Clarke and problem dp

    Clarke and problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...

随机推荐

  1. pandas dataframe 一行变多行 (query pv统计term pv)

    关键字: 用jieba切词 用expand 一列变多列 用stack 列转行 用group by + aggr 相同term的pv求和 上效果: query pv 今日新鲜事 今日头条 北京天气 上海 ...

  2. 21.线程,全局解释器锁(GIL)

    import time from threading import Thread from multiprocessing import Process #计数的方式消耗系统资源 def two_hu ...

  3. PowerShell - Invoke VBA function

    $xl = new-object -comobject Excel.Application $source_wb = $xl.workbooks.open($source) $xl.visible=$ ...

  4. Spring自动装配之依赖注入(DI)

    依赖注入发生的时间 当Spring IOC 容器完成了Bean 定义资源的定位.载入和解析注册以后,IOC 容器中已经管理类Bean定义的相关数据,但是此时IOC 容器还没有对所管理的Bean 进行依 ...

  5. for in 和for of的区别

    for in 和for of的区别:https://www.jianshu.com/p/c43f418d6bf0 1 遍历数组通常用for循环 ES5的话也可以使用forEach,ES5具有遍历数组功 ...

  6. Codeforces 433A (背包)

    题面 传送门 真是令人胃疼的题面 我不管,我要把苹果都给雪菜!(滑稽)(冬马党不要打我) 分析 突然感觉这题跟今年NOIP Day1T2有点像,都是根据数加减来构造背包,只不过这题是01背包而不是完全 ...

  7. java 关于泛型的一些知识点

    public class Generic <T>{ private T ob; public Generic(T ob){ this.ob=ob; } public T GetOb(){ ...

  8. 数组降维-JavaScript中apply方法妙用

    海纳百川,有容乃大 1.普通循环转换方式 将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转 ...

  9. Windows下svn使用教程

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  10. 11-基于CPCI的中频功率放大收发板

    1.板卡参数介绍 无线输入口 无线发射口 1M~3GHZ,可调,步进100HZ(非跳频模式) 功率:≤﹢10±2.5 dBm 收发通道数 收发各1通道/板 中频输入输出 70MHz, 5MHz/30M ...