QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#348477 | #6739. Teleport | wtz2333 | AC ✓ | 502ms | 216572kb | C++17 | 3.0kb | 2024-03-09 18:46:55 | 2024-03-09 18:46:56 |
Judging History
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"