Codeforces 821E Okabe and El Psy Kongroo
题意:我们现在位于(0,0)处,目标是走到(K,0)处。每一次我们都可以从(x,y)走到(x+1,y-1)或者(x+1,y)或者(x+1,y+1)三个位子之一。现在一共有N段线段,每条线段都是平行于X轴的。我们如果此时x是在这段线段之内的话,我们此时走到的点(x,y)需要满足0<=y<=Ci.现在保证一段线段的终点,一定是下一段线段的起点。问我们从起点走到终点的行走方案数。
dp方程比较显然:dp[i][j]+=dp[i-1][j]+dp[-1][j-1]+dp[i-1][j+1]
之后构造一个如下的矩阵即可:
110000..0
011100..0
...
000.....111
同时注意一下矩阵的初始化,因此WA了很多次....
#include<bits/stdc++.h>
using namespace std;
typedef __int64 LL;
const LL MODD=;
struct mat{
LL a[][];
void init(int t){
for(int i=;i<=t;i++)a[i][i]=;
}
void clear(){
memset(a,,sizeof(a));
}
};
int n;
LL k;
mat mul(mat x,mat y,int t){
mat h;
h.clear();
for(int i=;i<=t;i++)
for(int j=;j<=t;j++)
for(int k=;k<=t;k++){
h.a[i][j]+=(x.a[i][k]%MODD*y.a[k][j]%MODD)%MODD;
h.a[i][j]%=MODD;
}
return h;
}
mat pw(mat x,LL t,int l){
mat b;
b.clear();
b.init(l);
for(;t;t>>=,x=mul(x,x,l))
if(t&)b=mul(b,x,l);
return b;
}
int main(){
mat p,a,ans;
p.clear();
ans.clear();
for(int i=;i<=;i++)
for(int j=max(,i-);j<=min(i+,);j++)
p.a[i][j]=;
scanf("%d%I64d",&n,&k);
a.clear();
a.a[][]=;
bool flag=false;
for(int i=;i<=n;i++){
LL l,r;
int t;
scanf("%I64d%I64d%d",&l,&r,&t);
if(r>k){r=k;flag=true;}
ans=pw(p,r-l,t);
for(int j=t+;j<=;j++)a.a[j][]=;
ans=mul(ans,a,t);
for(int j=;j<=t;j++)a.a[j][]=ans.a[j][];
if(flag)break;
}
printf("%I64d\n",ans.a[][]);
return ;
}
Codeforces 821E Okabe and El Psy Kongroo的更多相关文章
- Codeforces 821E Okabe and El Psy Kongroo(矩阵快速幂)
E. Okabe and El Psy Kongroo time limit per test 2 seconds memory limit per test 256 megabytes input ...
- codeforces E. Okabe and El Psy Kongroo(dp+矩阵快速幂)
题目链接:http://codeforces.com/contest/821/problem/E 题意:我们现在位于(0,0)处,目标是走到(K,0)处.每一次我们都可以从(x,y)走到(x+1,y- ...
- Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo 矩阵快速幂优化dp
E. Okabe and El Psy Kongroo time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo DP+矩阵快速幂加速
E. Okabe and El Psy Kongroo Okabe likes to take walks but knows that spies from the Organization ...
- Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo dp+矩阵快速幂
E. Okabe and El Psy Kongroo Okabe likes to take walks but knows that spies from the Organization c ...
- 【codeforces 821E】Okabe and El Psy Kongroo
[题目链接]:http://codeforces.com/problemset/problem/821/E [题意] 一开始位于(0,0)的位置; 然后你每次可以往右上,右,右下3走一步; (x+1, ...
- CF821 E. Okabe and El Psy Kongroo 矩阵快速幂
LINK 题意:给出$n$条平行于x轴的线段,终点$k$坐标$(k <= 10^{18})$,现在可以在线段之间进行移动,但不能超出两条线段的y坐标所夹范围,问到达终点有几种方案. 思路:刚开始 ...
- CF821E 【Okabe and El Psy Kongroo】
首先我们从最简单的dp开始 \(dp[i][j]=dp[i-1][j]+dp[i-1][j+1]+dp[i-1][j-1]\) 然后这是一个O(NM)的做法,肯定行不通,然后我们考虑使用矩阵加速 \( ...
- [codeforces821E]Okabe and El Psy Kongroo
题意:(0,0)走到(k,0),每一部分有一条线段作为上界,求方案数. 解题关键:dp+矩阵快速幂,盗个图,注意ll 关于那条语句为什么不加也可以,因为我的矩阵C,就是因为多传了了len的原因,其他位 ...
随机推荐
- webservice wsdl语法基础
XML-WSDL基础知识 WSDL 1.1. WSDL 简介 1.1.1. 概述 WSDL 指网络服务描述语言 (Web Services Description Language) WSDL ...
- AngularJS学习篇(六)
AngularJS 控制器 AngularJS 应用程序被控制器控制. ng-controller 指令定义了应用程序控制器. 控制器是 JavaScript 对象,由标准的 JavaScript 对 ...
- AMD与commonJS
CommonJS:它是一个同步的模式.但是这种模式并不适合于浏览器端,如果浏览器同步模式一个一个加载模块,那么打开将会变得非常的慢. AMD:它最大的特点就是可以异步的方式加载模块,具体的不同在于AM ...
- 【IDEA】向IntelliJ IDEA创建的项目导入Jar包的两种方式
转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 今天用IDEA,需要导入一个Jar包,因为以前都是用eclipse的,所以对这个id ...
- sass学习--在htm文件中使用
一.导语 最近的战狼2好火爆啊,每天看战狼2的票房一路高飙,我估计比吴京还开心.看了这部戏的拍摄过程,除了敬佩就是踏实,是的,吴京是电影圈隔了这么久后能踏踏实实做电影的了,纯属个人见解,不喜请忽略.. ...
- ①bootstrap引入
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- linux-echo
echo 更新时间: 2017-10-11-11:55:24 echo:打印输出内容 参数选择 -e 激活转义字符 命令:echo 123 ,此命令 就会输出123 命令: echo -e &q ...
- NHibernate Criteria中 Restriction与Expression的差别
http://stackoverflow.com/questions/5483393/nhibernate-criteria-restriction-vs-expression 据说是Restrict ...
- UWP Composition API - RadialMenu
用Windows 8.1的童鞋应该知道OneNote里面有一个RadialMenu.如下图,下图是WIn10应用Drawboard PDF的RadialMenu,Win8.1的机器不好找了.哈哈,由于 ...
- .NET读取Excel文件的三种方法的区别
ASP.NET读取Excel文件方法一:采用OleDB读取Excel文件: 把Excel文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(strin ...