QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#348477#6739. Teleportwtz2333AC ✓502ms216572kbC++173.0kb2024-03-09 18:46:552024-03-09 18:46:56

Judging History

你现在查看的是最新测评结果

  • [2024-03-09 18:46:56]
  • 评测
  • 测评结果:AC
  • 用时:502ms
  • 内存:216572kb
  • [2024-03-09 18:46:55]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 5100;
int dis[maxn][maxn][2];
int dx[4] = {1,0,-1,0};
int dy[4] = {0,-1,0,1};
struct node{
    int x,y,opt;
};
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,k;
    cin >> n >> k;
    vector<string> s(n);
    for(int i = 0;i < n;i ++) {
        cin >> s[i];
    }
    memset(dis,0x3f,sizeof dis);
    int inf = dis[0][0][0];
    dis[0][0][0] = 0;
    deque<node> q;
    q.push_back({0,0,0});
    // cerr << "!!!!\n";
    while(!q.empty()) {
        auto [x,y,opt] = q.front();
        // cerr << x << " " << y << " " <<  opt << endl;
        q.pop_front();
        // cerr <<": asdfasd\n";
        if(x == n - 1 && y == n - 1) {
            cout << dis[x][y][opt] << endl;
            return 0;
        }
        auto check = [&](int x,int y,int opt) -> bool {
            if(x < 0 || x >= n) return false;
            if(y < 0 || y >= n) return false;
            if(s[x][y] == '*') return false;
            // if(dis[x][y][opt] != inf) return false;
            return true;
        };
        // if(opt == 1) {
        //     for(int i = 2;i < k;i += 2) {
        //         int xx = x + (i / 2);
        //         int yy = y + (i / 2);
        //         if(check(xx,yy,0)) {
        //             if(dis[xx][yy][0] < dis[x][y][opt]) break;
        //             if(dis[xx][yy][0] <= dis[x][y][opt])continue;
        //             dis[xx][yy][0] = dis[x][y][opt];
        //             q.push_front({xx,yy,0});
        //         }
        //     }
        // }
        for(int i = 0;i < k;i += 2) {
            int xx = y + 1 + (i / 2);
            int yy = x + (i / 2);
            if(check(xx,yy,1)) {
                if(dis[xx][yy][1] < dis[x][y][opt] + 1) break;
                if(dis[xx][yy][1] <= dis[x][y][opt] + 1)continue;
                dis[xx][yy][1] = dis[x][y][opt] + 1;
                q.push_back({xx,yy,1});
            }
        }
        for(int i = 2;i <= k;i += 2) {
            int xx = x + (i / 2);
            int yy = y + (i / 2);
            if(check(xx,yy,0)) {
                if(dis[xx][yy][0] < dis[x][y][opt] + 1) break;
                if(dis[xx][yy][0] == dis[x][y][opt] + 1)continue;
                dis[xx][yy][0] = dis[x][y][opt] + 1;
                q.push_back({xx,yy,0});
            }
        }
         // cerr <<": asdfasd\n";
        for(int i = 0;i < 4;i ++) {
            int xx = x + dx[i];
            int yy = y + dy[i];
            if(check(xx,yy,0)) {
                if(dis[xx][yy][0] <= dis[x][y][opt] + 1)continue;

                // cerr << xx << " " << yy << endl;
                dis[xx][yy][0] = dis[x][y][opt] + 1;
                q.push_back({xx,yy,0});
            }
        }
        // cerr << "asdarewrew\n";
        // cerr << "asdfgasd\n";
    }
    cout << -1 << endl;
    return 0;
}

// 1 0 0 1 0 0 
// 0 1 0 0 1 0
// 0 0 0 0 0 0
// 1 0 0 1 0 0

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 11ms
memory: 207084kb

input:

3 2
.*.
.*.
...

output:

3

result:

ok 1 number(s): "3"

Test #2:

score: 0
Accepted
time: 4ms
memory: 206812kb

input:

3 3
.*.
.*.
...

output:

2

result:

ok 1 number(s): "2"

Test #3:

score: 0
Accepted
time: 50ms
memory: 208108kb

input:

961 4
...*.*..*.....*.*..*..*..*.*.*.*.....*.....*....*..*...*....*.........*....*....*...*......*..*..*...*..*...*.....*...*...*.*.*.........**..**.......*.......*...*...*.*.*........*....*..*..*...*.....*.*......**.**..**...*..*.**.....*....*.*.*..*..*..*.*..*.*..*......*..*..*.*......*...*.*...*....

output:

540

result:

ok 1 number(s): "540"

Test #4:

score: 0
Accepted
time: 3ms
memory: 207844kb

input:

975 434
.*......*...*....*......*..*...*...**....*....*.......*...*.....*..*..*.*.*..*.*..*..*.*....*.*.*..*...*.*.....*......*.*...*......*..*..*......**..**.......*...*.*..*..*.*.**....*.*.*.....*....**.*..*..**.*..*.....*.*......*..*...*..*...*....**...*....*..*.*.*...........*..*.**.*.*..*.*..**...

output:

5

result:

ok 1 number(s): "5"

Test #5:

score: 0
Accepted
time: 20ms
memory: 207840kb

input:

966 19
..*.*.*........*.*..*.**..*....*..*..*....*.**..*.*.*..*.*.*..**....*.*.*....*.....*...........*.*..*.....*..*...*....*.*...*.*...*....*...*...*.*.*....*.*....**.*.......*....*.*.*...*..*..*..*.*...*...*...*..*..*..........*.*....*.*......*...*..**....*.*....**.....*..*..*..*.*....*...*..*.*....

output:

104

result:

ok 1 number(s): "104"

Test #6:

score: 0
Accepted
time: 12ms
memory: 207936kb

input:

973 199
..**.*...*.*...*.*.*.*.**..*.*.*..*......*.....*.*.*..*...**.....*.*..*.*..*...*....*..*...*....*.*...*.*......*..*.*.*.*......**......*.*.*.*.*.*...*...*...*....*......*.*.*.*..*..*..*...*..*.*....*....*.*...*..*..*.*..**.**..*.**....*.*...*..**..**...*......*.....*.....*..*.*.......*.*.*.....

output:

10

result:

ok 1 number(s): "10"

Test #7:

score: 0
Accepted
time: 16ms
memory: 207856kb

input:

984 95
.....*.*...*....*..*....*.*....**.**......*....*.*.*.......*.....*.*..*....*..*....*.*.....*..*.......*.*......*.*....*.....*......*...*....*....*......*....*.*...*........*......*.*....*.*...*....*..**....*.*.*.**....*..*.*..*..*.*......*..*......*.*......*...*......*.......*...*....*...**.....

output:

21

result:

ok 1 number(s): "21"

Test #8:

score: 0
Accepted
time: 502ms
memory: 216572kb

input:

2996 2
..*..*.....*..*.....*....**..*...........*..*........*..*..*.*..*..*.*.*.**.*.....**.*.......*.......*..*....*.....*..*.*.*....**.....*..**.....*.....*.......*.*.*.*....*...*..*.**......**..*.*...**..*..*......*..*.*...*......*.*.*.*...**.**..*.*........*.*..*...**......*.*..*.*..*....*.*.*.*...

output:

3354

result:

ok 1 number(s): "3354"

Test #9:

score: 0
Accepted
time: 24ms
memory: 216040kb

input:

2905 1023
.........*..*.**.....*...*.*....*.*.**.*..*...*..*....*...*.**.*.*.**..*......*...*.**..*...*..*.........*.........*.*.....**.*.*........*.....*.*....*..*.*.....*..*..*..*.*..*....**...*.*..*....*......*.........*.*.*.*......**.**.**..*.*.*..*..**..*..*...*...*.*.......*..*..*....*.*.........

output:

6

result:

ok 1 number(s): "6"

Test #10:

score: 0
Accepted
time: 43ms
memory: 216520kb

input:

2978 104
.*.........*...**.....*...*........*..*...*.*.*.....*........*.*...*.....*...*....*...*..*...*..*..*....*...*..*.*....*....*...*.......*.*.....*.*.......*.*..*...*.*.......*.*.*..........*.*..*.*..**.*....*.*.*..*...*.*.*.....*....*...*.*.*.*.........*.*.....**.*.*..*.*....*........*...*.**...

output:

58

result:

ok 1 number(s): "58"