Mistwald zoj 3497
链接
[https://vjudge.net/contest/294259#problem/K]
题意
就是有个m*n矩阵
出发(1,1) 出口(m,n)
然后给出每个点能到大的四个位置
而且一旦到达终点就得出去不能往回走
然后给出多次询问,p表示是否恰好刚好p步走到终点,如果还可能到其他点就是maybe
否则就是true ,如果不能到达就false
分析
就是离散数学里的那个可达矩阵,这里由于数据较小。就总共m*n个点就行了
然后再加上矩阵快速幂即可
还有就是关于getchar这个输入时要注意。我tm气死了,被这个读入给搞了
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int t,N,M,p,q,s;
struct Matrix{
int m[50][50];
}I,ans,A;
Matrix Mul(Matrix a,Matrix b)
{
int i, j, k;
Matrix c;
for(i = 1; i <= s; i++)
{
for(j = 1; j <= s; j++)
{
c.m[i][j]=0;
for(k = 1; k <= s; k++)
{
c.m[i][j]+=(a.m[i][k]*b.m[k][j]);
}
}
}
return c;
}
Matrix quickpagow(int n)
{
Matrix m = A, b = I;
while(n)
{
if(n & 1)
b = Mul(b,m);
n = n >> 1;
m = Mul(m,m);
}
return b;
}
int main(){
//ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>t;
while(t--){
memset(I.m,0,sizeof(I.m));
memset(ans.m,0,sizeof(ans.m));
memset(A.m,0,sizeof(A.m));
cin>>M>>N;
getchar();
s=M*N;
for(int i=1;i<=s;i++)
I.m[i][i]=1;
int x1,y1,x2,y2,x3,y3,x4,y4;
for(int i=1;i<=M;i++){
for(int j=1;j<=N;j++){
scanf("((%d,%d),(%d,%d),(%d,%d),(%d,%d))",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
getchar();
if(i==M&&N==j) continue;
A.m[(i-1)*N+j][(x1-1)*N+y1]=1;
A.m[(i-1)*N+j][(x2-1)*N+y2]=1;
A.m[(i-1)*N+j][(x3-1)*N+y3]=1;
A.m[(i-1)*N+j][(x4-1)*N+y4]=1;
}
}
cin>>q;
while(q--){
cin>>p;
ans=quickpagow(p);
if(ans.m[1][s]==0)
cout<<"False\n";
else{
bool flag=0;
for(int i=1;i<=s-1;i++)
if(ans.m[1][i]){
flag=1; break;
}
if(flag) cout<<"Maybe\n";
else cout<<"True\n";
}
}
cout<<"\n";
}
return 0;
}
Mistwald zoj 3497的更多相关文章
- 矩阵快速幂 ZOJ 3497 Mistwald
题目传送门 题意:看似给了一个迷宫,每个点能传送到4个地方,问在P时间能否到达终点 分析:其实是一个有向图,可以用邻接矩阵存图,连乘P次看是否能从1到n*m,和floyd的传递背包思想一样 #incl ...
- ZOJ 3497 Mistwald
矩阵快速幂. 邻接矩阵的$P$次方就是走$P$步之后的方案数,这里只记录能否走到就可以了.然后再判断一下三种情况即可. #pragma comment(linker, "/STACK:102 ...
- zoj3497(经典矩阵乘法)
原以为是用搜索做的题,想了好久都无法想到一个高效正确的解法. 后面发现竟然这就是矩阵的应用! 碉堡! 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值 ——选自ma ...
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- ZOJ 3686 A Simple Tree Problem
A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a rooted tree, each no ...
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
- ZOJ Problem Set - 1392 The Hardest Problem Ever
放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...
- ZOJ Problem Set - 1049 I Think I Need a Houseboat
这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...
- ZOJ Problem Set - 1006 Do the Untwist
今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...
随机推荐
- Go基础(2)
demo1: package main import ( "fmt" "strings" ) func main() { url := pathToUrl(&q ...
- 编译安装Keepalived2.0.0
简介 Keepalived是基于vrrp协议的一款高可用软件.Keepailived有一台主服务器和多台备份服务器,在主服务器和备份服务器上面部署相同的服务配置,使用一个虚拟IP地址对外提供服务,当主 ...
- .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个 ...
- 深入浅出NIO Socket实现机制
前言 Java NIO 由以下几个核心部分组成: Buffer Channel Selector 以前基于net包进行socket编程时,accept方法会一直阻塞,直到有客户端请求的到来,并返回so ...
- c# jobject 的数据结构的解析:
c# jobject 数据结构的解析:首先下载Newtonsoft.Json,增加引用using Newtonsoft.Json.Linq;把jobject的内容提取出来,Jobject的内容格式如下 ...
- loj#6073. 「2017 山东一轮集训 Day5」距离(树链剖分 主席树)
题意 题目链接 Sol 首先对询问差分一下,我们就只需要统计\(u, v, lca(u, v), fa[lca(u, v)]\)到根的路径的贡献. 再把每个点与\(k\)的lca的距离差分一下,则只需 ...
- Java实现"命令式"简易文本编辑器原型
源自早先想法, 打算从界面方向做些尝试. 找到个简单文本编辑器的实现: Simple Text Editor - Java Tutorials. 原本的菜单/按钮界面如下. 包括基本功能: 新建/打开 ...
- Android串口通讯
今天在整一个项目,需要利用串口通讯在网上看了好多人的帖子才稍微整出了一点头绪. 首先串口代码就是利用谷歌自己的api,将java代码放在java/android_serialport_api目录下,如 ...
- jQuery链式编程
链式编程 多行代码合并成一行代码,前提要认清此行代码返回的是不是对象.是对象才能进行链式编程 .html(‘val’).text(‘val’).css()链式编程,隐式迭代 链式编程注意:$(‘div ...
- Android Studio 添加引用Module项目
新建Android项目,修改为Module 新建一个android项目 给项目命名,这里命名为MyLibrary,作为可引用的Module项目 点击下一步,选择一个Activity,点击ok 下面将这 ...