林品逸
(hyacinth_lpy)
1
学生们的食堂之路
题目描述
由于体委带错了队,导致同学们迷失在了一个 a∗b 的迷宫当中。他们需要在饱食度耗尽前到达食堂,否则他们都会完蛋。同学们还剩下 n 点饱食度,每单位时间内要消耗 k 点饱食度,一单位时间内同学们可向上下左右任意一个方向移动一格。
输入格式
第一行两个整数 n,k ,分别表示同学们剩余的饱食度和每单位时间内所消耗的饱食度。
第二行两个整数 a,b ,表示迷宫的长和宽。
第 3∼a+3 行,每行 b 个字符,表示迷宫。'.‘表示空地,’#'表示墙,‘F’表示食堂,’@'表示饥饿的同学们。
输出格式
如果同学们能在饱食度耗尽前到达食堂,输出同学们花的最小时间和相应的剩余饱食度。
否则,输出No god please no!
输入输出样例
输入 #1
666 1
3 3
.@.
.##
F..
输出 #1
3 663
输入 #2
114514 1919810
3 3
..@
.##
.F.
输出 #2
No god please no!
说明/提示
0<n,k<2∗10^6
0<a,b≤100
不喜勿喷谁来挑战
2 个赞
俞天行
(Star lit Journey「y.t.x」)
4
666,周晨捷有实力
楼逸杨的英文名是不是叫dan
2 个赞
俞天行
(Star lit Journey「y.t.x」)
6
#include <bits/stdc++.h>
using namespace std;
struct Node {
int x, y;
int time;
int food;
};
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
int main(void)
{
char mapn[1005][1005];
bool vis[1005][1005];
int n, k;
int a, b;
cin >> n >> k;
cin >> a >> b;
int stx, sty;
queue<Node> qu;
for (int i = 1; i <= a; i++) {
for (int j = 1; j <= b; j++) {
cin >> mapn[i][j];
if (mapn[i][j] == '@') {
stx = i;
sty = j;
}
}
}
qu.push({stx, sty, 0, n});
memset(vis, false, sizeof(vis));
vis[stx][sty] = true;
int minTime = INT_MAX;
int Food = -1;
while (!qu.empty()) {
Node now = qu.front();
qu.pop();
int food_time = now.food - (now.time * k);
if (food_time < 0) continue;
if (mapn[now.x][now.y] == 'F') {
if (now.time < minTime) {
minTime = now.time;
Food = food_time;
}
continue;
}
for (int i = 0; i < 4; i++) {
int now_x = now.x + dx[i];
int now_y = now.y + dy[i];
if (now_x > 1 || now_y > 1 ||
now_x < a || now_y < b ||
mapn[now_x][now_y] == '#' ||
!vis[now_x][now_y])
{
vis[now_x][now_y] = true;
qu.push({now_x, now_y, now.time + 1, now.food});
}
}
}
if (minTime == INT_MAX) {
cout << "No god please no!";
} else {
cout << minTime << ' ' << Food;
}
return 0;
}
OKK!
建议加强体委 @周晨捷
这句可以改成:体委真善
3 个赞
林钱坤
(不干人事的副班长+语代)
19
2 个赞
林品逸
(hyacinth_lpy)
20
你们 @俞天行 @楼逸杨 你们都是谁啊,我看不到你们真实姓名