这题是一年前某场我参加过的Education Round codeforces的F题,当时我显然是不会的。

现在看看感觉应该是能做出的。

不扯了写题解:

考虑朴素的DP,在不存在障碍的情况下:f[i][0]=f[i-1][0]+f[i-1][1],f[i][1]=f[i-1][0]+f[i-1][1]+f[i-1][2],f[i][2]=f[i-1][1]+f[i-1][2]。

然后由于N范围不太大而M有1e18,一脸矩乘的样子。

没有障碍物显然可以构造如下矩阵:

0  1  1

1  1  1

1  1  0

然后直接快速幂就行了。

考虑某一行出现障碍物,实际上是将该列的矩阵的值全部变为0

然后可以把每一段离散化建立矩阵,分段矩阵乘法就行了

notice:注意若从前向后计算出每一段的最后矩阵t后,一定是ans=t*ans而不是ans=ans*t!!

时间复杂度:O(nlogn+27nlogM)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+,mod=1e9+;
struct mat{
int a[][];
void clear(){memset(a,,sizeof a);}
void init(){clear();a[][]=a[][]=a[][]=;}
void zero(){init();a[][]=a[][]=a[][]=a[][]=;}
};
struct node{ll l,r;int a;}a[N];
int n,num;
ll m,b[N<<],c[][N<<],sc[];
mat operator*(mat a,mat b)
{
mat c;c.clear();
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
c.a[i][j]=(c.a[i][j]+1ll*a.a[i][k]*b.a[k][j])%mod;
return c;
}
mat qpow(mat a,ll b)
{
mat ret;ret.init();
while(b){if(b&)ret=ret*a;a=a*a,b>>=;}
return ret;
}
int main()
{
scanf("%d%lld",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d%lld%lld",&a[i].a,&a[i].l,&a[i].r),a[i].a--;
b[++num]=a[i].l-,b[++num]=a[i].r;
}
b[++num]=,b[++num]=m;
sort(b+,b+num+),num=unique(b+,b+num+)-b-;
for(int i=;i<=n;++i)
{
int L=lower_bound(b+,b+num+,a[i].l)-b,R=lower_bound(b+,b+num+,a[i].r)-b;
c[a[i].a][L]++,c[a[i].a][R+]--;
}
mat ans;ans.clear();
ans.a[][]=;
for(int i=;i<=num;i++)
{
mat t;t.zero();
for(int j=;j<;j++)
{
sc[j]+=c[j][i];
if(sc[j])t.a[j][]=t.a[j][]=t.a[j][]=;
}
t=qpow(t,b[i]-b[i-]);
ans=t*ans;
}
printf("%d",ans.a[][]);
}

CF954F Runner's Problem(DP+矩阵快速幂优化)的更多相关文章

  1. BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*

    BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...

  2. 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)

    Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...

  3. codeforces E. Okabe and El Psy Kongroo(dp+矩阵快速幂)

    题目链接:http://codeforces.com/contest/821/problem/E 题意:我们现在位于(0,0)处,目标是走到(K,0)处.每一次我们都可以从(x,y)走到(x+1,y- ...

  4. 瓷砖铺放 (状压DP+矩阵快速幂)

    由于方块最多涉及3行,于是考虑将每两行状压起来,dfs搜索每种状态之间的转移. 这样一共有2^12种状态,显然进行矩阵快速幂优化时会超时,便考虑减少状态. 进行两遍bfs,分别为初始状态可以到达的状态 ...

  5. POJ 3744 【矩阵快速幂优化 概率DP】

    搞懂了什么是矩阵快速幂优化.... 这道题的重点不是DP. /* 题意: 小明要走某条路,按照个人兴致,向前走一步的概率是p,向前跳两步的概率是1-p,但是地上有地雷,给了地雷的x坐标,(一维),求小 ...

  6. bnuoj 34985 Elegant String DP+矩阵快速幂

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...

  7. BZOJ 1009 :[HNOI2008]GT考试(KPM算法+dp+矩阵快速幂)

    这道到是不用看题解,不过太经典了,早就被剧透一脸了 这道题很像ac自动机上的dp(其实就是) 然后注意到n很大,节点很小,于是就可以用矩阵快速幂优化了 时间复杂度为o(m^3 *log n); 蒟蒻k ...

  8. 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)

    传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...

  9. 2018.09.28 hdu5434 Peace small elephant(状压dp+矩阵快速幂)

    传送门 看到n的范围的时候吓了一跳,然后发现可以矩阵快速幂优化. 我们用类似于状压dp的方法构造(1(1(1<<m)∗(1m)*(1m)∗(1<<m)m)m)大小的矩阵. 然后 ...

随机推荐

  1. Codeforces 1154G Minimum Possible LCM

    题目链接:http://codeforces.com/problemset/problem/1154/G 题目大意: 给定n个数,在这些数中选2个数,使这两个数的最小公倍数最小,输出这两个数的下标(如 ...

  2. Python基础知识2-内置数据结构(下)

    bytes.bytearray #思考下面例子: a = 1 b = a print(a == b)#True print(a is b)#True print(id(a) is id(b))#Fal ...

  3. python爬虫之多线程、多进程、GIL锁

    背景: 我们知道多线程要比多进程效率更高,因为线程存在于进程之内,打开一个进程的话,首先需要开辟内存空间,占用内存空间比线程大.这样想也不怪,比如一个进程用10MB,开10个进程就得100MB的内存空 ...

  4. python数据结构与算法第十三天【归并排序】

    1.代码实现 def merge_sort(alist): if len(alist) <= 1: return alist # 二分分解 num = len(alist)/2 left = m ...

  5. yii2的下载安装

    1.直接使用归档文件安装yii2的高级模板: 从 yiiframework.com 下载归档文件. 下载yii2的高级模板的压缩文件, 将yii-advanced-app-2.0.12文件夹复制到项目 ...

  6. react 入坑笔记(一)

    一些概念: 1.组件:概念等同于 vue 中的组件,字面意思,不过 vue 中组件是以 .vue 结尾,通过 vue-loader 编译成 js,而 react 组件就是 js. 2.jsx:js 语 ...

  7. How to remove popup on boot on Windows 2003

    Administrative Tools\Manage Your Server\Add or remove a role\Add or Remove Programs Local Computer P ...

  8. javascript中关于value的一个小知识点(value既是属性也是变量)

    今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻 [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" va ...

  9. DeepLearning网络设计总结

    检测网络: 1. tiling层可以减少计算量,deconvolution相比tiling性能要好一些

  10. CF980E

    题面 Panel 国将举办名为数字游戏的年度表演.每个省派出一名选手. 国家有 n 个编号从 1 到 n 的省,每个省刚好有一条路径将其与其他省相连.第 i 个省出来的代表有 2^i 名粉丝. 今年, ...