답안 #1102782

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1102782 2024-10-18T21:34:00 Z chezpotato Tracks in the Snow (BOI13_tracks) C++14
100 / 100
595 ms 77664 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int h, w;
vector<string> grid;
vector<vector<bool>> vis;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    // freopen("input.in", "r", stdin);

    cin >> h >> w;
    grid = vector<string>(h);
    vis = vector<vector<bool>>(h, vector<bool>(w, false));
    for(int i=0; i<h; i++){
        cin >> grid[i];
    }

    //bfs tree with connected components
    //ans is depth of the tree
    //can treat as edges with 0 weight to same component
    //1 weight to edge to diff component
    //use a kind of floodfill with bfs for the edges

    deque<pair<int, int>> dq; dq.push_front({0,0});
    char type = grid[0][0]; vis[0][0] = true;
    int ans = 1;
    while(!dq.empty()){
        //floodfill bfs
        pair<int, int> cur = dq.front(); dq.pop_front();
        if(grid[cur.first][cur.second] != type){
            ans++;
            type = grid[cur.first][cur.second];
        }
        // cout << "CHECK" << endl;
        for(int i=cur.first-1; i<=cur.first+1; i++){
            if(i<0 || i>=h) continue;
            // cout << "cHECKPINTS" << endl;
            for(int j=cur.second-1; j<=cur.second+1; j++){
                if(j<0 || j>=w) continue;
                // cout << "testing " << i << " " << j << " with type " << grid[i][j] << endl;
                if(vis[i][j] == true || grid[i][j] == '.' || abs((cur.first + cur.second) - (i+j)) != 1){
                    // cout << vis[i][j] << " " << grid[i][j] << " " << abs((cur.first+cur.second) - (i+j)) << endl;
                    continue;
                }
                else if(grid[i][j] != type){
                    dq.push_back({i, j});
                    // cout << "pushing to back" << endl;
                }
                else{
                    dq.push_front({i,j});
                    // cout << "pushing to front" << endl;
                }
                vis[i][j] = true;
            }
        }
    }
    cout << ans << endl;



    
}
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 848 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 7 ms 848 KB Output is correct
5 Correct 2 ms 592 KB Output is correct
6 Correct 1 ms 508 KB Output is correct
7 Correct 1 ms 460 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 2 ms 592 KB Output is correct
11 Correct 2 ms 592 KB Output is correct
12 Correct 4 ms 592 KB Output is correct
13 Correct 2 ms 600 KB Output is correct
14 Correct 3 ms 592 KB Output is correct
15 Correct 11 ms 848 KB Output is correct
16 Correct 11 ms 848 KB Output is correct
17 Correct 9 ms 848 KB Output is correct
18 Correct 6 ms 848 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 848 KB Output is correct
2 Correct 38 ms 3936 KB Output is correct
3 Correct 171 ms 36040 KB Output is correct
4 Correct 43 ms 8492 KB Output is correct
5 Correct 121 ms 20296 KB Output is correct
6 Correct 591 ms 51096 KB Output is correct
7 Correct 2 ms 848 KB Output is correct
8 Correct 3 ms 848 KB Output is correct
9 Correct 2 ms 472 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 2 ms 848 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 30 ms 3768 KB Output is correct
14 Correct 18 ms 2384 KB Output is correct
15 Correct 12 ms 2812 KB Output is correct
16 Correct 19 ms 2040 KB Output is correct
17 Correct 85 ms 9296 KB Output is correct
18 Correct 46 ms 9040 KB Output is correct
19 Correct 45 ms 8528 KB Output is correct
20 Correct 52 ms 8016 KB Output is correct
21 Correct 102 ms 20808 KB Output is correct
22 Correct 123 ms 20204 KB Output is correct
23 Correct 165 ms 17488 KB Output is correct
24 Correct 108 ms 20296 KB Output is correct
25 Correct 261 ms 36080 KB Output is correct
26 Correct 378 ms 77664 KB Output is correct
27 Correct 502 ms 76552 KB Output is correct
28 Correct 595 ms 51016 KB Output is correct
29 Correct 577 ms 48080 KB Output is correct
30 Correct 517 ms 52680 KB Output is correct
31 Correct 413 ms 23428 KB Output is correct
32 Correct 462 ms 58980 KB Output is correct