题目链接

E. Okabe and El Psy Kongroo

分析

首先对于坐标为 (x,y)(x,y) 的点,设 f(x,y)f(x,y) 表示从原点到 (x,y)(x,y) 的路径不难得到递推公式 f(x,y)=f(x−1,y−1)+f(x−1,y)+f(x−1,y+1)f(x,y) = f(x-1,y-1)+f(x-1,y)+f(x-1,y+1),很明显这和把每个点建图然后能达点建边构造的图是一样的,显然计算复杂度太高,观察表达式,我们发现 xx 并没有什么作用,因为只能向前走 (x−>x+1x->x+1),因此我们可以只对 yy 坐标建图,建立邻接矩阵,对于点 (i,j)(i,j) 如果可以从y=i−>y=jy=i -> y=j则设d[i][j]=1d[i][j]=1 矩阵dk[i][j]表示从y=i的地方走k步到达y=j的地方d^k[i][j]表示从y=i的地方走k步到达y=j的地方 那么只需对每一条线段都建立这样的矩阵,然后计算 dbi−aid^{b_i -a_i}再把所有矩阵相乘就是答案.

AC code

#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define INF 0x3f3f3f3f
#define ALL(x) (x.begin(),x.end())
#define ms(x,v) memset(x,v,sizeof(x))
using namespace std;
typedef long long LL;typedef pair<LL,LL> Pair;typedef pair<int,pair<int,int> > Point;const int maxn = 3e5+10;
const LL MOD = 1e9+7;
const int sz = 16;
struct matrix{LL m[sz][sz];matrix(){ms(m,0);}void init(int y){ms(m,0);for(int i=1 ; i<y ; ++i){m[i][i+1]=m[i][i-1] = m[i][i] =1;}if(y)m[0][1]=m[0][0] = m[y][y]=m[y][y-1] =1;else m[0][0] =1;}void init(){for(int i=0 ; i<sz ; ++i)m[i][i] =1;}void print(){for(int i=0 ;i<sz ; ++i){for(int j=0 ; j<sz ; ++j)std::cout << m[i][j] << ' ';std::cout  << '\n';}}
};matrix mul(matrix& A,matrix & B){matrix ret;for(int i=0 ; i<sz ; ++i){for(int j=0 ; j<sz ; ++j){ret.m[i][j] = 0;for(int k=0 ; k<sz ; ++k)ret.m[i][j] += A.m[i][k] * B.m[k][j],ret.m[i][j]%=MOD;}}return ret;
}matrix power_mod(matrix x,LL n){matrix ret;ret.init();while (n) {//std::cout << "n = " <<n << '\n';if(n&1)ret = mul(ret,x);x = mul(x,x);//ret.print();n>>=1;}return ret;
}matrix A[2];int main(){ios::sync_with_stdio(false);cin.tie(0);LL n,k;cin>>n>>k;int t=0;ms(A,0);A[t].init();for(LL i=0  ; i<n ;++i){LL a,b,y;cin>>a>>b>>y;if(i == n-1)b=k;t ^=1;A[t].init(y);A[t] = power_mod(A[t],b-a);A[t] = mul(A[t^1],A[t]);}std::cout << A[t].m[0][0] << '\n';return 0;}

参考

editorial

codeforce#420 E. Okabe and El Psy Kongroo(图论+矩阵快速幂)相关推荐

  1. E.Okabe and El Psy Kongroo

    传送门 E. Okabe and El Psy Kongroo time limit per test 2 seconds memory limit per test 256 megabytes in ...

  2. Codeforce821E Okabe and El Psy Kongroo

    题意:给n条水平线段点终点高度,只能右上方向走,向右走,右下方向走,只能在第一象限及坐标轴上线段下面运动问到(K,0)有多少种方案 题解:可以推出DP式子,对每一条线段使用快速幂 #include & ...

  3. 【codeforces 821E】Okabe and El Psy Kongroo

    [题目链接]:http://codeforces.com/problemset/problem/821/E [题意] 一开始位于(0,0)的位置; 然后你每次可以往右上,右,右下3走一步; (x+1, ...

  4. CF821 E. Okabe and El Psy Kongroo 矩阵快速幂

    LINK 题意:给出$n$条平行于x轴的线段,终点$k$坐标$(k <= 10^{18})$,现在可以在线段之间进行移动,但不能超出两条线段的y坐标所夹范围,问到达终点有几种方案. 思路:刚开始 ...

  5. [CF 821E] Okabe and El Psy Kongroo

    题目 洛谷 题意 给定一个二维坐标系和一些线段,求从 (0,0)(0,0)(0,0) 走到 (k,0)(k,0)(k,0) 的方案总数.若当前坐标为 (x,y)(x,y)(x,y),下一步可以拓展到 ...

  6. CF821E Okabe and El Psy Kongroo

    一.题目 点此看题 好像某谷还没有翻译,建议翻译看看第一篇题解(还有一个提示比较重要) 二.解法 首先不考虑线段的限制,容易写出式子dp[i][j]=dp[i−1][j]+dp[i−1][j+1]+d ...

  7. 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)的做法,肯定行不通,然后我们考虑使用矩阵加速 \( ...

  8. cf 821E Okabe and El Psy Kongroo(矩阵快速幂)

    链接:http://codeforces.com/problemset/problem/821/E 分析:由于有边界而且不同段边界还不同,直接算是不行的..k是1e18,dp也不行..用一个16维的向 ...

  9. CF#420 B. Okabe and Banana Trees 思维|暴力|几何

    Okabe needs bananas for one of his experiments for some strange reason. So he decides to go to the f ...

最新文章

  1. UVALive 4216 Pole Position
  2. 阿里最新php面试题及答案,面经网-阿里php面试题(四)
  3. Win7电脑快速获取超级管理员权限的方法
  4. 蓝桥杯第五届省赛JAVA真题----n级台阶
  5. maven安装后环境变量配置
  6. spring事物管理--声明式(AspectJ)注解实现 (推荐使用)
  7. mysql5.7 datetime 默认值为‘0000-00-00 00:00:00‘值无法创建问题解决
  8. junit测试一个方法,报test class not found in selected project
  9. java redis监听问题_springboot+redis过期事件监听实现过程解析
  10. java opencv gamma_OpenCV函数cvAddWeighted调整alpha和gamma值 | 学步园
  11. 阿里健康:大数据下的北京雾霾经济
  12. 中国移动校招面试( 计算机、大数据、通信专业相关岗位)一面
  13. xp计算机找不到音量调节,电脑音量图标消失无法调整声音大小的解决方案
  14. ubuntu 关机后 自动重启 解决方法
  15. 我学会了用计算机作文,我学会了电脑作文
  16. 东莞塘厦适合团建的农家乐|团建出游好去处|休闲游玩好地方
  17. 微信公众号与微信小程序相辅相成
  18. bs架构用php编写,BS架构(bs架构开发用什么语言)
  19. 系统安全漏洞及解决方案
  20. 如何实现一个“线程池”

热门文章

  1. 线缆种类小结:BNC、RJ45和RJ48
  2. C语言return水仙花数,c语言(百合花)水仙花数的算法
  3. Win10校园网宽带连接频繁秒断
  4. 87-Python_某电商平台上销售不同规格包装、不同价格的水笔。编写程序,在不考虑运费的情况下,从键盘分别输人两种水笔的包装和价格,分别计算单根水笔的价格,根据价格就低原则打印输出选择购买哪种产品
  5. 【Java每日一题,Map和字符串】Ananagrams
  6. 图像语义分割样本制作——使用Matlab模块Image Labeler 标记样本
  7. Ettercap嗅探室友浏览的图片和账号密码
  8. 机器学习 | 决策树原理剪枝连续值缺失值处理
  9. Qt 窗体显示在屏幕最上面
  10. 收藏 根据拼音首字母筛选人名