BC #62 div1 02
/*
数位DP题,设dp[n][k][j]为前n位最后一位是k时mod为j的个数。操作都相同,可以使用矩阵加速。本来对于每一位是7*10,可以把它压向一个向量。
加速矩阵为70*70,再加一维计算前缀和即可。
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
const int MOD=1e9+7;
struct Matrix{
int a[75][75];
};
int l,r,K;
Matrix T; void set(Matrix &p){
for(int i=0;i<=70;i++) p.a[i][i]=1;
} Matrix mul(Matrix a,Matrix b){
Matrix c;
for(int i=0;i<=70;i++){
for(int j=0;j<=70;j++){
c.a[i][j]=0;
for(int k=0;k<=70;k++){
c.a[i][j]=((LL)c.a[i][j]+(LL)a.a[i][k]*(LL)b.a[k][j])%MOD;
}
}
}
return c;
} void clear(Matrix &C){
for(int i=0;i<=70;i++){
for(int j=0;j<=70;j++) C.a[i][j]=0;
}
} int getId(int i,int j){
return i+j*7;
} Matrix power(Matrix p,int c){
Matrix res;
clear(res);set(res);
while(c){
if(c&1) res=mul(res,p);
c>>=1;
p=mul(p,p);
}
return res;
} void getT(){
clear(T);
for(int i=0;i<7;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<10;k++){
if(j+k==K) continue;
int x=(i*10+k)%7;
T.a[getId(i,j)][getId(x,k)]++;
}
}
}
for(int i=0;i<10;i++) T.a[getId(0,i)][70]++;
T.a[70][70]=1;
} int main(){
int tt;
scanf("%d",&tt);
while(tt--){
scanf("%d%d%d",&l,&r,&K);
getT();
Matrix res;
clear(res);
for(int i=1;i<10;i++){
res.a[0][getId(i%7,i)]++;
}
Matrix tmp=mul(res,power(T,r));
int ans=tmp.a[0][70];
tmp=mul(res,power(T,l-1));
ans=(((LL)ans-(LL)tmp.a[0][70])%MOD+MOD)%MOD;
cout<<ans<<endl;
}
}
BC #62 div1 02的更多相关文章
- HTTPS连接的前几毫秒发生了什么——Amazon HTTPS案例分析
转自: http://blog.jobbole.com/48369/ 提示:英文原文写于2009年,当时的Firefox和最新版的Firefox,界面也有很大改动.以下是正文. 花了数小时阅读了如潮的 ...
- [转]HTTPS连接的前几毫秒发生了什么
本文由 伯乐在线 - 水果泡腾片 翻译.未经许可,禁止转载!英文出处:JEFF MOSER.欢迎加入翻译小组. 提示:英文原文写于2009年,当时的Firefox和最新版的Firefox,界面也有很大 ...
- HTTPS连接前的几毫秒发生了什么?
原文:http://blog.jobbole.com/48369/ 提示:英文原文写于2009年,当时的Firefox和最新版的Firefox,界面也有很大改动.以下是正文. 花了数小时阅读了如潮的好 ...
- Hadoop RPC
hadoop rpc机制 && 将avro引入hadoop rpc机制初探 1 RPC RPC(Remote Procedure Call)--远程过程调用,它是一种通过网络从远程计算 ...
- 协议分析之qq协议---qq登录
QQ 协议分析:获取各类登录会话密钥 我们知道QQ的一些会话密钥是在登录过程中生成的,尤其是Session Key,有了它便可以解密出聊天文本内容.本文主要是了解一下QQ的加密机制,首先是用嗅探工具W ...
- EChart数据的异步加载和更新
ECharts是国内开发一款图标插件,在网页中我们经常要用到图标显示,直接引用十分方便. 直接到ECharts主页调用插件 <!DOCTYPE html> <html style=& ...
- Linux系统排查2——CPU负载篇
本随笔介绍CPU负载的排查手段. 查看系统负载的工具:uptime,w,都能查看系统负载,系统平均负载是处于运行或不可打扰状态的进程的平均数, 可运行:运行态,占用CPU,或就绪态,等待CPU调度. ...
- 加载程序到android虚拟机报错: android.widget.RelativeLayout cannot be cast to android.widget.Button
05-23 02:53:48.416: E/Trace(875): error opening trace file: No such file or directory (2) 05-23 02:5 ...
- HDU5649 DZY Loves Sorting 线段树
题意:BC 76 div1 1004 有中文题面 然后奉上官方题解: 这是一道良心的基础数据结构题. 我们二分a[k]的值,假设当前是mid,然后把大于mid的数字标为1,不大于mid的数字标为0.然 ...
随机推荐
- HTTP、HTTP1.0、HTTP1.1、HTTP2.0——笔记
笔记来源地址:https://mp.weixin.qq.com/s/T2IErLDxbWP1a-VbRkZZHg HTTP: HTTP是WWW数据通信的基础,是应用层协议. HTTP是干什么的?用来给 ...
- javascript入门经典(第五版)-清华出版社之“经典”错误
学校教材太烂,于是自己买书. 果然是入门经典,开篇就把我惊着了~ 第九页≯1.4/ch1_example2.html / <script> //script block 2 documen ...
- java web 学习笔记 - jsp用的文件上传组件 SmartUpload
---恢复内容开始--- 1. SmartUpload 此控件在jsp中被广泛的使用,而FileUpload控件主要是用在框架中 2. 如果想要使用,需要在tomcat的lib目录中,将SmartUp ...
- CAD得到所有实体2
主要用到函数说明: IMxDrawSelectionSet::Select2 构造选择集.详细说明如下: 参数 说明 [in] MCAD_McSelect Mode 构造选择集方式 [in] VARI ...
- 梦想Android版CAD控件2019.01.23更新
下载地址:http://www.mxdraw.com/ndetail_10121.html?tdsourcetag=s_pcqq_aiomsg1. 增加异步读取CAD,DWG文件函数,MxFuncti ...
- dom4j使用方法详解
本文先做知识点的简单介绍,最后附完整案例. 一.解析XML文件 public class Foo { //url为XML文档地址 //自己封装了一个工具类 返回解析完成的document public ...
- ThinkPHP---thinkphp实用项
[一]代码调试 (1)跟踪信息 ①简介:用于展示系统执行的相关状况,类似于快递的物流信息.ThinkPHP中默认关闭.如需使用,则通过配置项SHOW_PAGE_TRACE(显示页面跟踪)来配置. ②位 ...
- 【搜索、bfs】Find The Multiple
Problem Given a positive integer n, write a program to find out a nonzero multiple m of n whose de ...
- 一步一步实现基于GPU的pathtracer(三):path tracing 简述
全局光照这个名词在计算机图形学里已经不算一个新名词了,现在一提到拟真度,很多人基本上都会去想到全局光照,这个名词上世纪七八十年代就有了,好像是由一个叫Jim Kajiya的大神在他那篇已经被引用了不知 ...
- Linux 服务器 U盘安装(避免U盘启动)以及拔除U盘后无法引导系统
一.U盘制作 首先下载两个文件: · rhel-server-6.3-i386-boot.iso 启动镜像 · rhel-server-6.3-i386-dvd. ...