【HDOJ】5564 Clarke and digits
DP+快速矩阵幂。注意base矩阵的初始化,不难。
/* 5564 */
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 const int mod = 1e9+;
const int maxn = ;
int ID[maxn][maxn];
int n; typedef struct mat_t {
__int64 m[maxn][maxn]; mat_t() {
memset(m, , sizeof(m));
} void init() {
memset(m, , sizeof(m));
} void print() {
rep(i, , n) {
rep(j, , n) {
printf("%I64d ", m[i][j]);
}
putchar('\n');
}
}
} mat_t; mat_t matMult(mat_t& a, mat_t& b) {
mat_t c; rep(i, , n)
rep(j, , n)
rep(k, , n)
c.m[i][j] = (c.m[i][j] + a.m[i][k]*b.m[k][j]%mod)%mod; return c;
} mat_t matPow(mat_t a, int m) {
mat_t ret; rep(i, , n)
ret.m[i][i] = ;
while (m) {
if (m & )
ret = matMult(ret, a);
a = matMult(a, a);
m >>= ;
} return ret;
} mat_t e;
mat_t base; void init(int s) {
// first column is one
// first row is zero(accept first one)
rep(j, , n) {
e.m[][j] = ;
if (j% == )
e.m[j][] = ;
else
e.m[j][] = ;
}
e.m[][] = ; rep(i, , ) {
rep(j, , ) {
rep(ii, , ) {
int jj = (*j+ii)%;
int id = ID[i][j];
int id_ = ID[ii][jj];
if (i+ii == s)
e.m[id][id_] = ;
else
e.m[id][id_] = ;
}
}
} #ifndef ONLINE_JUDGE
// e.print();
#endif
} void init_base() {
int cnt = ;
n = *+; rep(i, , )
rep(j, , )
ID[i][j] = cnt++;
rep(i, , )
base.m[][ID[i][i%]] = ;
} __int64 cal(int len) {
if (len == )
return ; __int64 ret = ;
mat_t res = matPow(e, len); rep(i, , n)
ret = (ret + base.m[][i]*res.m[i][]%mod)%mod;
return ret;
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int t;
int l, r, s;
__int64 nl, nr, ans; init_base();
scanf("%d", &t);
while (t--) {
scanf("%d %d %d", &l, &r, &s);
init(s);
nl = cal(l-);
nr = cal(r);
ans = (nr-nl+mod) % mod;
#ifndef ONLINE_JUDGE
printf("nl = %I64d, nr = %I64d\n", nl, nr);
#endif
printf("%I64d\n", ans);
} #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}
【HDOJ】5564 Clarke and digits的更多相关文章
- 【LeetCode】738. Monotone Increasing Digits 解题报告(Python)
[LeetCode]738. Monotone Increasing Digits 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu ...
- 【LeetCode】402. Remove K Digits 解题报告(Python)
[LeetCode]402. Remove K Digits 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...
- 【LeetCode】423. Reconstruct Original Digits from English 解题报告(Python)
[LeetCode]423. Reconstruct Original Digits from English 解题报告(Python) 标签: LeetCode 题目地址:https://leetc ...
- hdu 5564 Clarke and digits 矩阵快速幂优化数位dp
Clarke and digits Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 【HDOJ】4333 Revolving Digits
扩展KMP基础题目. /* 4333 */ #include <iostream> #include <sstream> #include <string> #in ...
- 【HDOJ】4729 An Easy Problem for Elfness
其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...
- 【HDOJ】5632 Rikka with Array
1. 题目描述$A[i]$表示二级制表示的$i$的数字之和.求$1 \le i < j \le n$并且$A[i]>A[j]$的$(i,j)$的总对数. 2. 基本思路$n \le 10^ ...
- 【HDOJ】4343 Interval query
最大不相交集合的数量.思路是dp[i][j]表示已经有i个不相交集合下一个不相交集合的最右边界.离散化后,通过贪心解. /* 4343 */ #include <iostream> #in ...
- 【HDOJ】4341 Gold miner
分组01背包.在一条直线上的点归为一组. /* 4341 */ #include <iostream> #include <sstream> #include <stri ...
随机推荐
- java多线程总结五:线程池的原理及实现
1.线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创 ...
- ERROR ITMS-90049错误解决
检查一下项目有集成友盟,shareSDK这种第三方包,里面有个腾讯bundle,包含了一个Info.plist. 去掉,就可以了.类似有其他第三方的bundle,可能也会出现这个问题. 原因估计是Ap ...
- iOS中 常用的mac终端指令
1.使用caffeinate阻止Mac运行屏幕保护和睡眠 caffeinate能阻止Mac进入睡眠状态,而且屏幕保护也不会激活.我们最好使用-t为命令加入具体的时间.比如下面的命令可以使Mac一小时内 ...
- asp.net 音乐播放器
<HTML> <HEAD><TITLE>Playback Example</TITLE> </HEAD> <BODY> < ...
- MVC3中 swfupload 按钮不显示 解决方案
这两天在做图片上传并显示的功能,之前就用过swfupload,觉得很不错,之前是用asp.net webform做的,这次的项目是用asp.net MVC3来做,视图引擎用的是Razor. 将js文件 ...
- jsp--文本框正则表达式
1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...
- 08_Spring实现action调用service,service调用dao的过程
[工程截图] [PersonDao.java] package com.HigginCui.dao; public interface PersonDao { public void savePers ...
- 九度OJ 1214 寻找丑数【算法】
题目地址:http://ac.jobdu.com/problem.php?pid=1214 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因 ...
- OpenJudge 2747 数字方格
1.链接地址: http://bailian.openjudge.cn/practice/2747 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 如上图,有3个 方格,每个 ...
- 工厂方法(Factory Pattern)
工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类.(注:“决定”不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际 ...