제출 #751712

#제출 시각아이디문제언어결과실행 시간메모리
751712cwzaTracks in the Snow (BOI13_tracks)C++17
100 / 100
1210 ms132508 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;


void IO(string name = "") {
	cin.tie(0)->sync_with_stdio(0);
	if (name.size()) {
		freopen((name + ".in").c_str(), "r", stdin);
		freopen((name + ".out").c_str(), "w", stdout);
	}
}

const int inf = 1e9+7;
vector<string> grid;
int H, W;

bool is_valid(int row, int col) {
    if(row>=0 && row<H && col>=0 && col<W && grid[row][col]!='.') return true;
    return false;
}

int main() {
    // IO("pcb");

    cin >> H >> W;
    grid.resize(H);
    for(int i = 0; i < H; i++) cin >> grid[i];

    vector<vector<bool>> visited(H, vector<bool>(W));
    vector<vector<int>> dist(H, vector<int>(W, inf));
    dist[0][0] = 0;
    deque<pair<int,int>> dq;
    dq.push_back({0, 0});
    while(dq.size()) {
        auto [row, col] = dq.front(); dq.pop_front();
        if(visited[row][col]) continue;
        pair<int,int> dirs[] = {{0,1},{0,-1},{1,0},{-1,0}};
        for(auto[dirrow, dircol] : dirs) {
            int nrow = row + dirrow;
            int ncol = col + dircol;
            if(is_valid(nrow, ncol) && !visited[nrow][ncol]) {
                if(grid[row][col]==grid[nrow][ncol]) { // 0
                    if(dist[row][col]+0<dist[nrow][ncol]) {
                        dist[nrow][ncol] = dist[row][col]+0;
                        dq.push_front({nrow, ncol});
                    }
                } else { // 1
                    if(dist[row][col]+0<dist[nrow][ncol]) {
                        dist[nrow][ncol] = dist[row][col]+1;
                        dq.push_back({nrow, ncol});
                    }
                }
            }
        }
    }
    int ans = 0;
    for(int i = 0; i < H; i++) {
        for(int j = 0; j < W; j++) {
            if(dist[i][j]<inf) {
                ans = max(ans, dist[i][j]);
            }
        }
    }
    cout << ans+1;
}

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

tracks.cpp: In function 'void IO(std::string)':
tracks.cpp:9:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    9 |   freopen((name + ".in").c_str(), "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tracks.cpp:10:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 |   freopen((name + ".out").c_str(), "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...