# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
738929 |
2023-05-09T16:36:15 Z |
He_Huanglu |
Maze (JOI23_ho_t3) |
C++17 |
|
1 ms |
468 KB |
#include <bits/stdc++.h>
#define ii pair<int, int>
#define fi first
#define se second
using namespace std;
const int N = 10;
int n, m, s, rs, cs, re, ce;
int dx[4] = {0, -1, 0, 1};
int dy[4] = {-1, 0, 1, 0};
vector <int> f[N], a[N], p[2][N], ok[N];
queue <ii> q[2];
int get(int t, int id, int u) {
return p[t][id][u] == u ? u : p[t][id][u] = get(t, id, p[t][id][u]);
}
void upd(int t, int id, int i, int j, int val) {
int u = get(t, id, i);
while (u <= j) {
if(t && !f[id][u]) {
q[1].push({id, u});
f[id][u] = val;
// cout << id << " " << u << "***\n";
}
if(!t && !f[u][id]) {
q[1].push({u, id});
f[u][id] = val;
// cout << u << " " << id << "***\n";
}
u = get(t, id, u + 1);
p[t][id][i] = u;
}
}
main () {
cin.tie(0)->sync_with_stdio(0);
if(fopen("task.inp", "r")) {
freopen("task.inp", "r", stdin);
freopen("wa.out", "w", stdout);
}
cin >> m >> n >> s >> rs >> cs >> re >> ce;
for(int i = 1; i <= m; i++) a[i].resize(n + 1), f[i].resize(n + 1), ok[i].resize(n + 1);
for(int i = 1; i <= m; i++) {
for(int j = 0; j <= n + 1; j++) p[1][i].push_back(j);
}
for(int i = 1; i <= n; i++) {
for(int j = 0; j <= m + 1; j++) p[0][i].push_back(j);
}
for(int i = 1; i <= m; i++) {
for(int j = 1; j <= n; j++) {
char ch; cin >> ch;
a[i][j] = (ch == '.' ? 1 : 0);
}
}
q[1].push({rs, cs}); f[rs][cs] = 1;
while (!q[1].empty() || !q[0].empty()) {
while (!q[1].empty()) {
int x, y; tie(x, y) = q[1].front(); q[1].pop();
q[0].push({x, y});
// cout << x << " " << y << " " << f[x][y] << " $$\n";
if(x == re && y == ce) return cout << f[x][y] - 1 << "\n", 0;
for(int i = 0; i < 4; i++) {
int u = x + dx[i], v = y + dy[i];
if(u && u <= m && v && v <= n && !f[u][v] && a[u][v]) {
// cout << x << " " << y << " : " << u << " " << v << "\n";
f[u][v] = f[x][y];
q[1].push({u, v});
// cout << u << " " << v << "*\n";
}
}
}
while (!q[0].empty()) {
int x, y; tie(x, y) = q[0].front(); q[0].pop();
if(s != 1) {
// cout << x << " " << y << "\n";
if(x == rs && y == cs) {
int s1 = max(1, x - s), s2 = max(1, y - s);
int s3 = min(m, x + s), s4 = min(n, y + s);
// cout << s1 << " " << s2 << " " << s3 << " " << s4 << "\n";
for(int i = s1; i <= s3; i++) {
for(int j = s2; j <= s4; j++) if(!f[i][j]) {
f[i][j] = f[x][y] + 1;
q[1].push({i, j});
// cout << i << " " << j << "**\n";
}
}
}
else {
for(int i = 0; i < 4; i++) {
int u = x + dx[i], v = y + dy[i], val = f[x][y] + 1;
if(u && u <= m && v && v <= n && ok[u][v]) {
// if(x == 2 && y == 1) cout << u << " " << v << " " << i << " " << y + s << " ^^\n";
if(i == 0 && y + s <= n) upd(0, y + s, max(1, x - s), min(m, x + s), val);
if(i == 1 && x + s <= m) upd(1, x + s, max(1, y - s), min(n, y + s), val);
if(i == 2 && y - s >= 1) upd(0, y - s, max(1, x - s), min(m, x + s), val);
if(i == 3 && x - s >= 1) upd(1, x - s, max(1, y - s), min(n, y + s), val);
break ;
}
}
}
ok[x][y] = 1;
}
else {
for(int i = 0; i < 4; i++) {
int u = x + dx[i], v = y + dy[i];
if(u && u <= m && v && v <= n && !f[u][v]) {
f[u][v] = f[x][y] + 1;
q[1].push({u, v});
// cout << u << " " << v << " ****\n";
}
}
}
}
}
}
Compilation message
Main.cpp:36:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
36 | main () {
| ^~~~
Main.cpp: In function 'int main()':
Main.cpp:39:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
39 | freopen("task.inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:40:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
40 | freopen("wa.out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 11 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 11 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 11 |
8 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 11 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 11 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 11 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 11 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 11 |
4 |
Halted |
0 ms |
0 KB |
- |