凉了

P2895 [USACO08FEB] Meteor Shower S

小超手123 @ 2021-08-22 22:08:31

#include <bits/stdc++.h>
using namespace std;
struct coord {
    int x, y;
};
queue<coord> Q;
int ans[310][310];    //记录到达安全的点的时间
int death[310][310];  //记录每个点被流星雨砸中的时间
int next[5][3] = { { 0, 1 }, { 1, 0 }, { -1, 0 }, { 0, -1 } };
int main() {
    int m, Ans = 100000;
    memset(ans, -1, sizeof(ans));        //把-1赋值给ans数组
    memset(death, 0x7f, sizeof(death));  //把death数组赋值最大化
    cin >> m;
    for (int i = 1; i <= m; i++) {
        int x, y, t;
        cin >> x >> y >> t;
#define MIN(x, y, t)      \
    if (x >= 0 && y >= 0) \
        death[x][y] = min(death[x][y], t);  //流星砸下时间已最早的那个为准
        MIN(x, y, t);
        for (int i = 0; i < 4; i++)  //记录烧焦时间
            MIN(x + next[i][0], y + next[i][1], t);
    }
    Q.push((coord){ 0, 0 });  //把起点(0,0)入队,coord强制转化结构体
    ans[0][0] = 0;
    while (!Q.empty()) {
        coord u = Q.front();                                 //把队首赋给u
        int ux = u.x, uy = u.y;                              //记录扩展前坐标
        Q.pop();                                             //把之前的数据扔了
        for (int i = 0; i < 4; i++) {                        //向四个点扩展
            int xx = ux + next[i][0], yy = uy + next[i][1];  //记录扩展后坐标
            if (xx < 0 || yy < 0 || ans[xx][yy] != -1 || ans[ux][uy] + 1 >= death[xx][yy])
                continue;                   //超过地图或走过或时间超过了就跳出
            ans[xx][yy] = ans[ux][uy] + 1;  //记录此地点用时
            Q.push((coord){ xx, yy });      //入队
        }
    }
    for (int i = 0; i < 305; i++)
        for (int j = 0; j < 305; j++)
            if (death[i][j] > 1000 && ans[i][j] != -1)  //安全点且走到了
                Ans = min(Ans, ans[i][j]);              //记录最短用时
    if (Ans == 100000)                                  //用时没变就没走到
        cout << -1;
    else
        cout << Ans;
    return 0;
}

by PragmaGCC @ 2021-08-22 22:11:08

讨论区题解?


by 小超手123 @ 2021-08-22 22:13:07

不是 为什么洛谷对了 我的电脑都不行


by 小超手123 @ 2021-08-22 22:16:26

我这烂电脑呀


by ADay @ 2021-08-22 22:22:35

@PragmaGCC Orz这么晚了还在卷


|