题目传送门

题意:看似给了一个迷宫,每个点能传送到4个地方,问在P时间能否到达终点

分析:其实是一个有向图,可以用邻接矩阵存图,连乘P次看是否能从1到n*m,和floyd的传递背包思想一样

  1. #include <bits/stdc++.h>
  2.  
  3. int tot;
  4. struct Mat {
  5. int m[30][30];
  6. Mat() {
  7. memset (m, 0, sizeof (m));
  8. }
  9. void init() {
  10. for (int i=1; i<=tot; ++i) {
  11. m[i][i] = 1;
  12. }
  13. }
  14. };
  15. Mat operator * (const Mat &a, const Mat &b) {
  16. Mat ret;
  17. for (int i=1; i<=tot; ++i) {
  18. for (int j=1; j<=tot; ++j) {
  19. for (int k=1; k<=tot; ++k) {
  20. int &r = ret.m[i][j];
  21. r = r | (a.m[i][k] & b.m[k][j]);
  22. }
  23. }
  24. }
  25. return ret;
  26. }
  27. Mat operator ^ (Mat x, int n) {
  28. Mat ret; ret.init ();
  29. while (n) {
  30. if (n & 1) {
  31. ret = ret * x;
  32. }
  33. x = x * x;
  34. n >>= 1;
  35. }
  36. return ret;
  37. }
  38. int x[4], y[4];
  39. int m, n;
  40.  
  41. int main() {
  42. int T; scanf ("%d", &T);
  43. while (T--) {
  44. scanf ("%d%d\n", &m, &n);
  45. tot = m * n;
  46. Mat mat;
  47. for (int i=1; i<=m; ++i) {
  48. for (int j=1; j<=n; ++j) {
  49. scanf ("((%d,%d),(%d,%d),(%d,%d),(%d,%d))", &x[0], &y[0], &x[1], &y[1], &x[2], &y[2], &x[3], &y[3]);
  50. int pos = (i - 1) * n + j;
  51. if (pos == tot) {
  52. continue;
  53. }
  54. for (int i=0; i<4; ++i) {
  55. mat.m[pos][(x[i]-1)*n+y[i]] = 1;
  56. }
  57. getchar ();
  58. }
  59. }
  60. int q; scanf ("%d", &q);
  61. while (q--) {
  62. int t; scanf ("%d", &t);
  63. if (t == 0) {
  64. if (tot == 1) {
  65. puts ("True");
  66. } else {
  67. puts ("False");
  68. }
  69. } else {
  70. Mat ans = mat ^ t;
  71. if (!ans.m[1][tot]) {
  72. puts ("False");
  73. } else {
  74. int i;
  75. for (i=1; i<=tot; ++i) {
  76. if (ans.m[1][i]) {
  77. break;
  78. }
  79. }
  80. if (i == tot) {
  81. puts ("True");
  82. } else {
  83. puts ("Maybe");
  84. }
  85. }
  86. }
  87. }
  88. puts ("");
  89. }
  90.  
  91. return 0;
  92. }

  

矩阵快速幂 ZOJ 3497 Mistwald的更多相关文章

  1. zoj 2974 Just Pour the Water (矩阵快速幂,简单)

    题目 对于案例的解释请见下图: 这道要变动提取一下矩阵,之后就简单了 具体解释可看代码: #include <string.h> #include <stdio.h> #inc ...

  2. ZOJ 2794 Just Pour the Water 【矩阵快速幂】

    给你n个杯子,每次有特定的到水规则,倒m次请问最后每个被子里还有多少水 我们很容易发现每次变化的规则相同,那么可以set 一个矩阵存放 然后多次倒水就相当于矩阵相乘,在m 范围达到(1<= M  ...

  3. ZOJ - 2853 Evolution 线性变换变成矩阵快速幂

    题意:给你N个数,1~N分别为num[i],  以及T个 (i,j,P) 对于每组(i,j,P),让你将  num[i] 减去 P*num[i]  再把 P*num[i] 加到 num[j] 上.T个 ...

  4. zoj 2974 Just Pour the Water矩阵快速幂

    Just Pour the Water Time Limit: 2 Seconds      Memory Limit: 65536 KB Shirly is a very clever girl. ...

  5. Educational Codeforces Round 14E. Xor-sequences(矩阵快速幂)

    传送门 题意 给定序列,从序列中选择k(1≤k≤1e18)个数(可以重复选择),使得得到的排列满足\(x_i与x_{i+1}\)异或的二进制表示中1的个数是3的倍数.问长度为k的满足条件的序列有多少种 ...

  6. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  7. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  8. 51nod 1113 矩阵快速幂

    题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...

  9. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

随机推荐

  1. ios二维码生成

    二维码扫描现在已经有很多的库可以使用了,常用的有ZXing和ZBar.如果感兴趣的同学可以自行研究. libqrencode介绍:是一个用C语言编写的用来解析二维条形码(QR Code)的程序库,li ...

  2. IIS 发布mvc 403.14

    转载: iis7 发布mvc3 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容及Login on failed for “IIS APPPOOL\ASP ...

  3. 警告 - no rule to process file 'WRP_CollectionView/README.md' of type net.daringfireball.markdown for architecture i386

    warning: no rule to process file '/Users/mac/Downloads/Demo/Self/WRP_CollectionView/WRP_CollectionVi ...

  4. NYOJ题目168房间安排

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAssAAAOTCAIAAADGwNmiAAAgAElEQVR4nOy9PY7cyLPufTchXwsZu9

  5. NYOJ题目97兄弟郊游问题

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr8AAAHxCAIAAADrwUM4AAAgAElEQVR4nO3dLXLjytfH8f8mzLOQYC

  6. 20145206邹京儒《Java程序设计》第2周学习总结

    20145206 <Java程序设计>第2周学习总结 教材学习内容总结 一.类型 Java可区分为基本类型和类类型两大类型系统,其中,类类型也称为参考类型. 在Java中的基本类型主要可区 ...

  7. 利用drozer进行Android渗透测试

    一.安装与启动 1. 安装 第一步:从 http://mwr.to/drozer 下载Drozer (Windows Installer) 第二步:在 Android 设备中安装 agent.apk ...

  8. android HTTPclient

    Apache包是对android联网访问封装的很好的一个包,也是android访问网络最常用的类. 下面分别讲一下怎么用HttpClient实现get,post请求. 1.Get 请求 1 2 3 4 ...

  9. sql server 对象资源管理器(一)

    当需要查看具体数据库的所有用户表.存储过程等创建修改等脚本的时候,可以借用视图中的对象资源管理器的详细信息里面获取. 具体操作如下图所示:

  10. Python 自然语言处理(1) 计数词汇

    Python有一个自然语言处理的工具包,叫做NLTK(Natural Language ToolKit),可以帮助你实现自然语言挖掘,语言建模等等工作.但是没有NLTK,也一样可以实现简单的词类统计. ...