西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)

- 题意:有来两个人A和B,A追B,A和B每次向上下左右移动一个单位,一共有两扇门,问A是否可以追上B(在门口追上也算合法).
- 题解:当时看题意说在门口也算?就觉得是判断两个人到门口的时间,对他们两个人分别跑bfs,记录他们到每个门口的步数,然后if判断一下即可.
- 代码:
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define me memset
#define rep(a,b,c) for(int a=b;a<=c;++a)
#define per(a,b,c) for(int a=b;a>=c;--a)
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
using namespace std;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b) {return a/gcd(a,b)*b;}
int n,m;
char s[20][20];
bool st[20][20];
int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
int zx,zy,hx,hy;
int ex1,ey1,ex2,ey2;
int res1=INF,res2=INF,res3=INF,res4=INF;
struct misaka{
int x,y,cnt;
}e;
void bfs1(int x,int y){
me(st,false,sizeof(st));
queue<misaka> q;
int cur=0;
q.push({x,y,0});
while(!q.empty()){
auto tmp=q.front();
q.pop();
if(st[tmp.x][tmp.y]) continue;
st[tmp.x][tmp.y]=true;
if(s[tmp.x][tmp.y]=='@' && cur<2){
if(tmp.x==ex1 && tmp.y==ey1){
res1=tmp.cnt;
}
else res2=tmp.cnt;
cur++;
}
rep(i,0,3){
int tx=tmp.x+dx[i];
int ty=tmp.y+dy[i];
if((s[tx][ty]=='*' || s[tx][ty]=='@') && !st[tx][ty]){
q.push({tx,ty,tmp.cnt+1});
}
}
}
}
void bfs2(int x,int y){
me(st,false,sizeof(st));
queue<misaka> q;
int cur=0;
q.push({x,y,0});
while(!q.empty()){
auto tmp=q.front();
q.pop();
if(st[tmp.x][tmp.y]) continue;
st[tmp.x][tmp.y]=true;
if(s[tmp.x][tmp.y]=='@' && cur<2){
if(tmp.x==ex1 && tmp.y==ey1){
res3=tmp.cnt;
}
else res4=tmp.cnt;
cur++;
}
rep(i,0,3){
int tx=tmp.x+dx[i];
int ty=tmp.y+dy[i];
if((s[tx][ty]=='*' || s[tx][ty]=='@') && !st[tx][ty]){
q.push({tx,ty,tmp.cnt+1});
}
}
}
}
int main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m;
rep(i,1,n){
rep(j,1,m){
cin>>s[i][j];
if(s[i][j]=='Z') {zx=i,zy=j;}
else if(s[i][j]=='H') {hx=i,hy=j;}
else if(s[i][j]=='@'){
if(!ex1 && !ey1) {ex1=i;ey1=j;}
else {ex2=i;ey2=j;}
}
}
}
bfs1(hx,hy);
bfs2(zx,zy);
if(res3<res1 || res4<res2) cout<<"give me northeast chicken rice and milk tea TOMORROW!\n";
else cout<<"give me northeast chicken rice and milk tea!\n";
return 0;
}
西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)的更多相关文章
- 江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)
链接:https://ac.nowcoder.com/acm/contest/635/H来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客网 江西财经大学第二届程序设计竞赛同步赛 D.绕圈游戏-(跳青蛙游戏)找数的所有因子就可以了
链接:https://ac.nowcoder.com/acm/contest/635/D来源:牛客网 D.绕圈游戏 433为了帮ddd提升智商,决定陪他van特殊的游戏.433给定一个带有n个点的环, ...
- 哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级) Solution
A: Solved. 分别处理出每个%7后余数的数字个数,再组合一下 #include <bits/stdc++.h> using namespace std; #define ll lo ...
- ACM-东北大学程序设计竞赛-网络赛(2016.04.16)
Problem: A Time limit: 1s Mem limit: 64 MB AC/Submission: 0/0 Discuss Back Ranklist Stat ...
- 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解
链接:https://www.nowcoder.com/acm/contest/118/A 来源:牛客网 PUBG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- 第十四届浙江财经大学程序设计竞赛重现赛--A-A Sad Story
链接:https://www.nowcoder.com/acm/contest/89/A 来源:牛客网 1.题目描述 The Great Wall story of Meng Jiangnv’s Bi ...
- Problem H: 零起点学算法28——参加程序设计竞赛
#include<stdio.h> int main() { int a,b; while(scanf("%d %d",&a,&b)!=EOF) ||b ...
- 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 I
链接:https://www.nowcoder.com/acm/contest/122/I来源:牛客网 题目描述 小q最近在做一个项目,其中涉及到了一个计时器的使用,但是笨笨的小q却犯难了,他想请你帮 ...
- 牛客网 湖南大学2018年第十四届程序设计竞赛重现赛 A game
链接:https://www.nowcoder.com/acm/contest/125/A来源:牛客网 Tony and Macle are good friends. One day they jo ...
随机推荐
- DHCP最佳实践(三)
这是Windows DHCP最佳实践和技巧的最终指南. 如果您有任何最佳做法或技巧,请在下面的评论中发布它们. 在本指南(三)中,我将分享以下DHCP最佳实践和技巧. 仅在需要时才使用IP冲突检测 运 ...
- 彻底搞懂MySQL为什么要使用B+树索引
目录 MySQL的存储结构 表存储结构 B+树索引结构 B+树页节点结构 为什么要用B+树索引 二叉树 多叉树 B树 B+树 搞懂这个问题之前,我们首先来看一下,MySQL表的存储结构 MySQL的存 ...
- ctfhub技能树—文件上传—无验证
打开靶机 查看页面信息 编写一句话木马 <?php echo "123"; @eval(@$_POST['a']); ?> 上传木马 上传成功,并拿到相对路径地址 查看 ...
- 命令模式与go-redis command设计
目录 一.什么是命令(Command)模式 二.go-redis command相关代码 三.总结 一.什么是命令(Command)模式 命令模式是行为型设计模式的一种,其目的是将一个请求封装为一个对 ...
- 1V转5V芯片,三个元件即可组成完整的稳压方案
1V低电压要转成5V的电压,需要1V转5V的芯片,由于1V输入,所以不需要指望能输出多大的电流,压差和1V的供电电压意味着供电电流也是无法做大的了.一般1V转5V的输出电流在0MA-100mA,一般6 ...
- CSGO项目
#include <Windows.h> #include <sstream> #include <iostream> #include <math.h> ...
- django 请求处理流程 链路追踪
class BaseMiddleware: # https://github.com/django/django/blob/master/tests/utils_tests/test_decorato ...
- Python中,单引号,双引号,三引号的使用区别与原因
先说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行如:s1 = "hello,world"如果要写成多行,那么就要使用/ ("连行符")吧,如s ...
- loj10153二叉苹果树
有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点.这棵树共 N 个节点,标号 1 至 N,树根编号一定为 1. 我们用一根树枝两端连接的节点编号描述一根树枝的位置.一棵有四根树 ...
- MySQL的索引为什么用B+Tree?InnDB的数据存储文件和MyISAM的有何不同?
前言 这篇文章的题目,是我真实在面试过程中遇到的问题,某互联网众筹公司在考察面试者MySQL相关知识的第一个问题,我当时还是比较懵的,没想到这年轻人不讲武德,不按套路出牌,一般的问MySQL的相关知识 ...