Codeforces 821E Okabe and El Psy Kongroo
2024-10-13 18:12:32
题意:我们现在位于(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 ;
}
最新文章
- as3绕过策略文件给视频截图
- 自己赚钱送女友iPhone做惊喜
- Amr and Chemistry CodeForces 558C(BFS)
- 解决 Android Studio 乱码问题
- Linux学习小结(转)
- 开通博客第一天 (先发一些android(java)常见异常信息
- JSP入门:介绍什么是JSP和Servlet(转)
- why do we need virtual methods in C++?
- redis单机主从搭建
- 将缓冲区的数字字符串转化成BCD码数据_INT PubNumericToBCDStr(_UCHR *pcNStr, _INT iNLen, _UCHR *pcBCDStr)
- webpack中实现按需加载
- ACCP8.0 HTML标签
- Arrays和String单元测试 20175301
- hdoj3138
- mysql启动报错 mysql InnoDB: Error: could not open single-table tablespace file
- python工具使用笔记
- Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)
- 【GMT43智能液晶模块】例程十:DMA实验——存储器到存储器的传输
- 【转】ASP.NET Core MVC 配置全局路由前缀
- Luogu3825 NOI2017 游戏 2-SAT
热门文章
- POJ3264 (RMQのST解法)
- Codeforces 376C. Socks
- 2.安装Nginx
- 验证Oracle处理速度
- Android AsyncTask内部线程池异步执行任务机制简要分析
- ";use strict";详解
- 通过jettymain启动项目
- 逆向知识第八讲,if语句在汇编中表达的方式
- spring+struts2+hibernate整合
- short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确。为何?