This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<iostream>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include<list>
#include<cstring>
#include<algorithm>
#define fio ios_base::sync_with_stdio(0)
//배열크기 확인
#define MAXNUM 20
using namespace std;
struct point{
int x, y, cost;
point operator +(const point & a) const{
return {x + a.x, y + a.y, cost};
}
};
int main(){
int n;
int ans=1000000000;
int cost[MAXNUM][MAXNUM]={0};
char map[MAXNUM][MAXNUM]={0};
queue<point> q;
memset(cost, 40, sizeof(cost));
point dir[4] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
scanf("%d", &n);
for (int i=1; i<=n; i++)
scanf("%s", map[i]+1);
for (int i=0; i<=n+1; i++) {map[i][0] = map[i][n+1] = map[0][i] = map[n+1][i] = '#';}
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++) {
if (map[i][j] == 'M') {
q.push({j, i, 0});
cost[i][j] = 0;
}
}
}
while (!q.empty()) {
point cur = q.front(); q.pop();
for (int i=0; i<4; i++) {
int cnt=0;
point next = cur;
while (map[next.y][next.x] != 'W' && map[next.y][next.x] != '#') {
if (map[next.y][next.x] == 'H') {
ans = min(ans, cur.cost);
}
next = next + dir[i];
}
while (map[next.y][next.x] == 'W') {
cnt++;
next = next + dir[i];
}
next.cost += cnt * cnt;
while (map[next.y][next.x] == '.' || map[next.y][next.x] == 'H') {
if (cost[next.y][next.x] > next.cost) {
cost[next.y][next.x] = next.cost;
if (map[next.y][next.x] == 'H') {
ans = min(ans, cost[next.y][next.x]);
break;
}
q.push(next);
}
next = next + dir[i];
}
}
}
printf("%d\n", ans > 999999999 ? -1 : ans);
return 0;
}
Compilation message (stderr)
aqua.cpp: In function 'int main()':
aqua.cpp:29:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &n);
~~~~~^~~~~~~~~~
aqua.cpp:31:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", map[i]+1);
~~~~~^~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |