Submission #72129

# Submission time Handle Problem Language Result Execution time Memory
72129 2018-08-26T05:26:42 Z 동진의 (#2167, kdk3776, define_chan, Jinpari) Aquatic Labyrinth (FXCUP3_aqua) C++17
0 / 100
3 ms 488 KB
//
//  main.cpp
//  boj
//
//  Created by 주진형 on 2018. 4. 17..
//  Copyright © 2018년 주진형. All rights reserved.
//
#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 110
using namespace std;

struct point{
    int x, y, cost;
    bool operator <(const point & a) const{
        return cost > a.cost;
    }
    point operator +(const point & a) const{
        return {x + a.x, y + a.y, cost};
    }
};

int main(){
    int n;
    int ans=-1;
    char map[MAXNUM][MAXNUM]={0};
    bool check[MAXNUM][MAXNUM]={0};
    priority_queue<point> q;
    point dir[4] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
    point goal;
    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});
                check[i][j] = true;
            }
            else if(map[i][j] == 'H'){
                goal = {j, i, 0};
            }
        }
    }
    
    while (!q.empty()) {
        point cur = q.top(); 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] != '#') {
                next = next + dir[i];
            }
            while (map[next.y][next.x] == 'W') {
                cnt++;
                next = next + dir[i];
            }
            if (map[next.y][next.x] == '.' || map[next.y][next.x] == 'H') {
                if (check[next.y][next.x]) {continue;}
                check[next.y][next.x] = true;
                next.cost += cnt * cnt;
                if (next.y == goal.y && next.x == goal.x) {
                    ans = next.cost;
                    goto stop;
                }
                q.push(next);
            }
        }
    }
    
stop:
    printf("%d\n", ans);
    
    return 0;
}























Compilation message

aqua.cpp: In function 'int main()':
aqua.cpp:39:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &n);
     ~~~~~^~~~~~~~~~
aqua.cpp:41:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s", map[i]+1);
         ~~~~~^~~~~~~~~~~~~~~~
aqua.cpp:72:38: warning: 'goal.point::x' may be used uninitialized in this function [-Wmaybe-uninitialized]
                 if (next.y == goal.y && next.x == goal.x) {
                     ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
aqua.cpp:72:17: warning: 'goal.point::y' may be used uninitialized in this function [-Wmaybe-uninitialized]
                 if (next.y == goal.y && next.x == goal.x) {
                 ^~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 376 KB Output is correct
2 Incorrect 2 ms 488 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 376 KB Output is correct
2 Incorrect 2 ms 488 KB Output isn't correct
3 Halted 0 ms 0 KB -