Codeforces Round #420 E
Okabe and El Psy Kongroo
题意:有n条平行x轴的线段,每条线段的起点为(ai,ci),终点为(bi,ci),且满足ai=b(i-1),从起点出发,每次可以往3个方向走,分别为 (x + 1, y + 1), (x + 1, y), or (x + 1, y - 1),且走的过程必须满足0>=y>=ci,求走到(k,0)有多少种走法
思路:dp+矩阵快速幂,
dp[i][0]=dp[i-1][0]+dp[i-1][1]
...........
dp[i][j]=dp[i-1][j]+dp[i-1][j+1]+dp[i-1][j-1]
...........
dp[i][c]=dp[i-1][c]+dp[i-1][c-1]
得到
dp[i][0] dp[i][1] ... dp[i][j] ... dp[i][c]
s矩阵 [ ]
dp[i+1][0] dp[i+1][1] ... dp[i+1][j] ... dp[i+1][c]
每段线段用一次矩阵快速幂
AC代码:
#include "iostream" #include "string.h" #include "stack" #include "queue" #include "string" #include "vector" #include "set" #include "map" #include "algorithm" #include "stdio.h" #include "math.h" #define ll long long #define bug(x) cout<<x<<" "<<"UUUUU"<<endl; #define mem(a) memset(a,0,sizeof(a)) using namespace std; const int N=20; ll M,Mod=1e9+7; struct Mat{ll m[N][N];Mat(){mem(m);}Mat friend operator* (Mat a, Mat b){Mat c;for(int i=0; i<M; i++)for(int j=0; j<M; j++)for(int k=0; k<M; k++)c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%Mod;return c;} }; Mat PowMod(Mat a, ll b){Mat c;for(int i=0; i<M; ++i) c.m[i][i]=1;while(b){if(b&1) c=c*a;a=a*a;b>>=1;}return c; } ll n,k,a[105],b[105],c[105]; int main(){cin>>n>>k;for(int i=0; i<n; ++i){cin>>a[i]>>b[i]>>c[i];}Mat t;for(int i=0;i<16;i++)for(int j=i-1;j<=i+1;j++)if(j>=0&&j<16)t.m[i][j] = 1;Mat ans;ans.m[0][0]=1;for(int i=0; i<n; ++i){k-=(b[i]-a[i]);M=c[i]+1;if(k>=0){ans=ans*PowMod(t,b[i]-a[i]);}else{k+=(b[i]-a[i]);ans=ans*PowMod(t,k);}}cout<<ans.m[0][0];return 0; } /* 1 3 0 3 3 2 6 0 3 0 3 10 2 */
转载于:https://www.cnblogs.com/max88888888/p/7102892.html
Codeforces Round #420 E相关推荐
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- Codeforces Round #420 (Div. 2)
这一场PP说很简单,我就闲来无事敲一敲好了,反正也考完了(雾,不过只剩数据结构和c++ A. Okabe and Future Gadget Laboratory time limit per tes ...
- codeforces round 420 div2 补题 CF 821 A-E
A Okabe and Future Gadget Laboratory 暴力 #include<bits/stdc++.h> using namespace std; typedef l ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)
Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
- Codeforces Round #270
Codeforces Round #270 题目链接 A:我是筛了下素数.事实上偶数仅仅要输出4和x - 4,奇数输出9和x - 9就可以 B:贪心的策略,把时间排序后.取每k个的位置 C:贪心.每次 ...
- 构造 Codeforces Round #302 (Div. 2) B Sea and Islands
题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...
- [Educational Codeforces Round 16]A. King Moves
[Educational Codeforces Round 16]A. King Moves 试题描述 The only king stands on the standard chess board ...
最新文章
- Sql年月日计算方法
- 算力大战是BCH最坏的一种处理方式
- 云极知客开放平台接口调用方法(C#)
- python requests下载文件很慢-python requests 下载大文件不完整
- easyui combobox设置只读属性
- error: 'for' loop initial declarations are only allowed in C99 or C11 mode
- jzoj4051-序列统计【NTT】
- cmd命令不识别exp_cmd 命令行exp 命令导出数据库文件
- Nginx初探索之安装、启动、关闭和重启
- 学习SQLite之路(二)
- 如何清除vsphere主机提示“此主机当前没有管理网络冗余”
- 华为荣耀3x畅玩版解锁
- 龙芯芯片CPU的产品路线说明
- quick-cocos2d-x 绑定C++自定义类
- Linux模拟试题及答案(全)
- cuBLAS使用(4)
- MBR与GPT分区扫盲,希捷2T、3T硬盘测评(多图杀猫)
- 【已补蓝奏云链接】PyTorch中MNIST数据集(附datasets.MNIST离线包)下载慢/安装慢的解决方案
- 软件测试项目交付,成功交付离岸项目的三个步骤
- 童年中的电视剧你还记得几个?
热门文章
- OpenFOAM安装教程(史上最全:OpenFOAM、ParaView、OpenFOAM多版本共存)
- ps怎么一下选中多个图层_超实用!50个非常实用的PS快捷键命令大全分享
- high severity error mysql_pg将运行日志导入表中的方法及时区问题解决
- jsp获取当前时间存入mysql数据库_jsp获取当前时间插入Mysql数据库?
- 二叉树的锯齿形层序遍历Python解法
- python如何安装wordcloud_不知如何利用Python中wordcloud的安装和使用?这里手把手教你...
- mysql id会用完吗_数据库自增ID用完了会怎样?
- php判断是否为数字_PHP将英文数字转换为阿拉伯数字
- 计算机网络网关作用,默认网关的作用
- 干货总结:SPI总线详细要点