题目

洛谷

题意

给定一个二维坐标系和一些线段,求从 (0,0)(0,0)(0,0) 走到 (k,0)(k,0)(k,0) 的方案总数。若当前坐标为 (x,y)(x,y)(x,y),下一步可以拓展到 (x+1,y+1)、(x+1,y)、(x+1,y−1)(x+1,y+1)、(x+1,y)、(x+1,y-1)(x+1,y+1)、(x+1,y)、(x+1,y−1)。注意不能超出给出的线段——即为上边界。线段间没有重叠和空隙,保证最后一条线段覆盖 kkk。

首先,可以想到一个 dpdpdp,定义 dp[i][j]dp[i][j]dp[i][j] 为走到 (i,j)(i,j)(i,j) 的方案数,那么转移就很显然了:dp[i][j]=dp[i−1][j−1]+dp[i−1][j]+dp[i−1][j+1]dp[i][j]=dp[i-1][j-1]+dp[i-1][j]+dp[i-1][j+1]dp[i][j]=dp[i−1][j−1]+dp[i−1][j]+dp[i−1][j+1],注意判断边界即可。

然而,k<=1e18k<=1e18k<=1e18,显然 TTT 到没朋友。看到这么大的数据范围,首先想到——能否用矩阵加速呢?但是,右矩阵应该是在随着上边界而不断改变的啊,怎么办呢?考虑到不同上边界之间是递推的关系,而上边界的个数 <=100<=100<=100,做上边界个数次矩阵快速幂即可。

时间复杂度 O(n∗log(k)∗c[i]3)O(n*log(k)*c[i]^3)O(n∗log(k)∗c[i]3),大概在 2e72e72e7 左右,跑过绰绰有余。

Code:

struct Matrix
{LL n, m, c[MAXN][MAXN];Matrix(){memset(c, 0, sizeof c);}void Clear(){memset(c, 0, sizeof c);}friend Matrix operator *(Matrix A,Matrix B){Matrix Res;
//      Res.Clear();Res.n = A.n, Res.m = B.m;for (Int k = 1; k <= B.n; ++ k)for (Int i = 1; i <= A.n; ++ i)for (Int j = 1; j <= A.m; ++ j)if ( B.c[k][j] )Res.c[i][j] += A.c[i][k] * B.c[k][j] % Mod,Res.c[i][j] %= Mod;return Res;}void Print(){for (Int i = 1; i <= n; ++ i, putchar('\n'))for (Int j = 1; j <= m; ++ j)printf("%lld ", c[i][j]);}
}A, B, C;
inline Matrix QuickPow(Matrix x,LL y)
{Matrix Temp;
//  Temp.Clear();Temp.n = Temp.m = x.m;for (Int i = 1; i <= x.m; ++ i)Temp.c[i][i] = 1;while ( y ){if (y & 1)Temp = Temp * x;x = x * x;y /= 2;}return Temp;
}
int main()
{LL n, k;read( n ); read( k );B.n = B.m = C.n = C.m = 16;for (Int i = 1; i <= 16; ++ i)C.c[i][i] = 1;for (Int i = 1; i <= n; ++ i){LL a, b, c;read( a ); read( b ); read( c );c ++;b = Min(b, k);B.Clear();for (Int y = c; y >= 1; -- y){if (y != c)B.c[y][y + 1] = 1;B.c[y][y] = 1;if (y != 1)B.c[y][y - 1] = 1;}
//      B.Print();C = C * QuickPow(B, b - a); }A.n = 1, A.m = 16;A.c[1][1] = 1;A = A * C;printf("%lld", A.c[1][1]);return 0;
}

[CF 821E] Okabe and El Psy Kongroo相关推荐

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

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

  2. 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 ...

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

    题目链接 E. Okabe and El Psy Kongroo 分析 首先对于坐标为 (x,y)(x,y) 的点,设 f(x,y)f(x,y) 表示从原点到 (x,y)(x,y) 的路径不难得到递推 ...

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

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

  5. Codeforce821E Okabe and El Psy Kongroo

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

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

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

  7. CF821E Okabe and El Psy Kongroo

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

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

  9. EL PSY CONGROO

    加粗样式 #include <bits/stdc++.h> using namespace std; int mod = 98319; vector<int> edge[100 ...

最新文章

  1. LightOJ 1364 Expected Cards(概率+DP)
  2. 定时自动按键软件_[按键精灵手机版教程]QUI界面也可以如此炫酷
  3. Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围。
  4. excel实战应用案例100讲(十五)-在Excel中对Python进行操作完美工具PyXLL-Jupyter
  5. 前端学习(523):双飞翼布局
  6. [label][JavaScript]七个JavaScript技巧
  7. 我国企业对开源社区的贡献度_开源对企业有利的6个理由
  8. Windows Phone 7(accelerometer)重力感应编程
  9. 通过SQL发送邮件,SQL发送Email(转)
  10. java okhttp设置超时_Java OkHttpClient.setWriteTimeout方法代码示例
  11. 理解委托是类型安全的
  12. 电力技术监督导则_会议报道:2019年电力行业燃煤发电企业节能监督管理专业技术人员及燃煤发电机组能效水平对标管理办法培训班...
  13. hadoop2.6---常用命令
  14. 用计算机制作flash动画教案,最新最完整Flash动画制作教案.doc
  15. 编辑PDF文档无需购买会员;流失与版式分别是什么,PDF与OFD又有什么区别
  16. 笔记本拆c面_给老笔记本更换高清屏的经验与总结(翻车记录)
  17. 11年的macbook还能用吗_8年老本的第二春:2011款Macbook Pro换血记
  18. 虚拟机无法服务器系统安装win7系统,如何解决虚拟机安装Win7系统失败的问题
  19. Hadoop安装与环境配置
  20. mac os 录屏快捷键_5款好用的Mac录屏软件推荐

热门文章

  1. shell脚本函数返回数组
  2. 网络编程的三个重要信号(SIGHUP ,SIGPIPE,SIGURG)
  3. 道客阅读无法打开php文件,无法打开文件因为内容有错误怎么办
  4. PB 操作EXCEL表的方法
  5. 日常小结:emoji表情转换utf-8编码字符串(存入数据库)/还原表情字符(页面展示)
  6. SearchEngin_Censys
  7. 下面几款手机APP请慎重选择 不要迷恋其中
  8. vue项目中使用阿里巴巴iconfont字体图标
  9. 魔法学院(hard version)
  10. 数据库关系代数运算----自然连接