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.然 ...
随机推荐
- jQuery学习笔记(3)-操作jQuery包装集的函数
一.前言 在使用jQuery选择器获取到jQuery包装集后,我们就要对这些包装集进行各种操作 二.创建新的元素 1.使用HTMLDOM创建元素 (1)什么是DOM 当网页被加载时,浏览器会创建页面的 ...
- MyElipse如何添加Emmet插件
把这个jar文件放到myeclipse2014安装目录下dropins文件夹中,然后重启myeclipse即可. 可到window-->perferences里查看,如果成功则会看到emmet选 ...
- NX自动出图 效果图
- 【C++】智能指针简述(六):智能指针总结及补充
本文我们主要来总结一下前文介绍过的智能指针相关原理及实现,顺便补充一下前文未提到的shared_ptr删除器部分的内容. 总结: 1.智能指针,通过RAII机制,构造对象时完成资源的初始化,析构对象时 ...
- navicat创建存储过程报错
搞了半天这个恶心的报错,最后发现竟然是存储过程的一个varchar类型的参数没给长度,如varchar(64)长度必须指定不然就会报错: mark一记
- 【转】WITH AS 用法
转载自:http://blog.csdn.net/shaochao14/article/details/6223052 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery ...
- Markdown(github)语法
<< 访问 Wow!Ubuntu NOTE: This is Simplelified Chinese Edition Document of Markdown Syntax. If yo ...
- Redis 它是什么?它用来做什么?它的优势与短板如何?
阅读目的: 对什么是内存型数据库有概念性的认知.? Redis 是什么? 通常而言目前的数据库分类有几种,包括 SQL/NSQL,,关系数据库,键值数据库等等 等,分类的标准也不以,Redis本质上也 ...
- POJ_1062_(dijkstra)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 48126 Accepted: 14343 Descripti ...
- 10.5 集合ArrayList 和 io流
1.ArrayListToFile package day10_io_fileWrite_Read.arraylist_tofile; import java.io.BufferedWriter; i ...