제출 #101449

#제출 시각아이디문제언어결과실행 시간메모리
101449rocketninja7Tracks in the Snow (BOI13_tracks)C++14
84.69 / 100
2059 ms106048 KiB
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

pair<int, int> dir[]={make_pair(0, -1), make_pair(1, 0), make_pair(0, 1), make_pair(-1, 0)};

int main(){
    int H, W;
    scanf("%d%d", &H, &W);
    char grid[H][W+1];
    for(int i=0;i<H;i++){
        scanf("%s", &grid[i]);
    }
    int dist[H][W];
    for(int i=0;i<H;i++){
        for(int j=0;j<W;j++){
            dist[i][j]=-1;
        }
    }
    dist[0][0]=1;
    priority_queue<pair<int, pair<int, int> > > proc;
    proc.push(make_pair(-1, make_pair(0, 0)));
    while(!proc.empty()){
        int x=proc.top().second.first, y=proc.top().second.second;
        proc.pop();
        for(int i=0;i<4;i++){
            if(x+dir[i].first>-1&&x+dir[i].first<H&&y+dir[i].second>-1&&y+dir[i].second<W){
                if(grid[x+dir[i].first][y+dir[i].second]!='.'){
                    if(dist[x+dir[i].first][y+dir[i].second]==-1){
                        if(grid[x+dir[i].first][y+dir[i].second]==grid[x][y]){
                            dist[x+dir[i].first][y+dir[i].second]=dist[x][y];
                        }
                        else{
                            dist[x+dir[i].first][y+dir[i].second]=dist[x][y]+1;
                        }
                        proc.push(make_pair(-dist[x+dir[i].first][y+dir[i].second], make_pair(x+dir[i].first, y+dir[i].second)));
                    }
                }
            }
        }
    }
    int ans=1;
    for(int i=0;i<H;i++){
        for(int j=0;j<W;j++){
            ans=max(ans, dist[i][j]);
        }
    }
    printf("%d", ans);
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

tracks.cpp: In function 'int main()':
tracks.cpp:14:29: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'char (*)[(W + 1)]' [-Wformat=]
         scanf("%s", &grid[i]);
                     ~~~~~~~~^
tracks.cpp:11:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &H, &W);
     ~~~~~^~~~~~~~~~~~~~~~
tracks.cpp:14:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s", &grid[i]);
         ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...