CF954F Runner's Problem(DP+矩阵快速幂优化)
这题是一年前某场我参加过的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+矩阵快速幂优化)的更多相关文章
- BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*
BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...
- 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)
Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...
- codeforces E. Okabe and El Psy Kongroo(dp+矩阵快速幂)
题目链接:http://codeforces.com/contest/821/problem/E 题意:我们现在位于(0,0)处,目标是走到(K,0)处.每一次我们都可以从(x,y)走到(x+1,y- ...
- 瓷砖铺放 (状压DP+矩阵快速幂)
由于方块最多涉及3行,于是考虑将每两行状压起来,dfs搜索每种状态之间的转移. 这样一共有2^12种状态,显然进行矩阵快速幂优化时会超时,便考虑减少状态. 进行两遍bfs,分别为初始状态可以到达的状态 ...
- POJ 3744 【矩阵快速幂优化 概率DP】
搞懂了什么是矩阵快速幂优化.... 这道题的重点不是DP. /* 题意: 小明要走某条路,按照个人兴致,向前走一步的概率是p,向前跳两步的概率是1-p,但是地上有地雷,给了地雷的x坐标,(一维),求小 ...
- 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 ...
- BZOJ 1009 :[HNOI2008]GT考试(KPM算法+dp+矩阵快速幂)
这道到是不用看题解,不过太经典了,早就被剧透一脸了 这道题很像ac自动机上的dp(其实就是) 然后注意到n很大,节点很小,于是就可以用矩阵快速幂优化了 时间复杂度为o(m^3 *log n); 蒟蒻k ...
- 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 ...
- 2018.09.28 hdu5434 Peace small elephant(状压dp+矩阵快速幂)
传送门 看到n的范围的时候吓了一跳,然后发现可以矩阵快速幂优化. 我们用类似于状压dp的方法构造(1(1(1<<m)∗(1m)*(1m)∗(1<<m)m)m)大小的矩阵. 然后 ...
随机推荐
- zabbix-2.4.5的安装配置与使用
系统最小化安装 环境: zabbix_server 12.1.1.1 zabbix_agent 12.1.1.2 zabbix_proxy 12.1.1.3 1.安装环境: ...
- Spring注解标签详解@Autowired @Qualifier等 @Slf4j
@Slf4j @Slf4j注解实现日志输出 自己写日志的时候,肯定需要: private final Logger logger = LoggerFactory.getLogger(LoggerTes ...
- SpringBoot之处理JSON数据举例
SpringBoot使用@RequestBody注解会自动将请求body中的json数据绑定到参数上.使用@ResponseBody注解,在返回参数时自动将对象转换为JSON格式返回. 举例代码: c ...
- c#处理json数据最好的方式,没有之一。
c#处理json数据最好的方式,没有之一. 引用Json.Net(需要.NET 4.5及以上版本) using Newtonsoft.Json.Linq; 使用非常简单 JObject result ...
- java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer; at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.jav
在整合spring和mybatis在执行数据库操作的时候报出了: java.lang.AbstractMethodError: org.mybatis.spring.transaction.Sprin ...
- Lodop中特殊符号¥打印设计和预览不同
Lodop中¥符号样式改变问题 Lodop中对超文本样式的解析,虽然说是按照调用的本机ie引擎,但是调用的ie版本可能不同,导致在ie下是一种样式,预览又是另一种样式.可能是有些样式没有具体设置,走的 ...
- Spring Boot 构建电商基础秒杀项目 (一) 项目搭建
SpringBoot构建电商基础秒杀项目 学习笔记 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包, Spring Boot ...
- Go中的Init函数
init函数会在main函数执行之前进行执行.init用在设置包.初始化变量或者其他要在程序运行前优先完成的引导工作. 举例:在进行数据库注册驱动的时候. 这里有init函数 package post ...
- puppet一个完整的实例
一个具体实例来简单说明puppet的具体结构 创建第一个配置 puppet的组成清单这主要包含这几个部分 资源,文件,模板,节点,类,定义 puppet中有个模块的定义,这个比较重要,基本是puppe ...
- Listview 包含 edittext 的解决方案
转载:https://blog.csdn.net/qq_28268507/article/details/53666576 一. 前几天在群里聊天,碰到一个哥们问listview的itemview中包 ...