상세 컨텐츠

본문 제목

백준 21938 영상처리 혼내주기

혼내주기

by lazz 2022. 3. 22. 02:42

본문

반응형

 

픽셀마다 rgb 값을 읽어서 평균을 낸 뒤 T값을 기준으로 connectivity를 판별해 bfs를 돌리면 된다.
뭔가 귀찮음!

 

#include <bits/stdc++.h>
#define fastio ios::sync_with_stdio(0), cin.tie(0)
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define all(v) v.begin(), v.end()

int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};

int arr[1005][1005];
bool visited[1005][1005];
int n, m, T;

void input() {
    cin >> n >> m;
    for(int i = 0; i < n; ++i) {
        for(int j = 0; j < m; ++j) {
            int sum = 0;
            for(int k = 0; k < 3; ++k) {
                int num; cin >> num;
                sum += num;
            }
            arr[i][j] = sum / 3;
        }
    }
    cin >> T;
}

void b(int x, int y) {
    queue<pii> q;
    visited[x][y] = true;
    q.push({x, y});

    while(!q.empty()) {
        auto [fx, fy] = q.front(); q.pop();

        for(int i = 0; i < 4; ++i) {
            int nx = fx + dx[i], ny = fy + dy[i];

            if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
            if(visited[nx][ny] || arr[nx][ny] < T) continue;

            visited[nx][ny] = true;
            q.push({nx, ny});
        }
    }
}

int main() {
    fastio;
    input();

    int ans = 0;
    for(int i = 0; i < n; ++i) {
        for(int j = 0; j < m; ++j) {
            if(visited[i][j] || arr[i][j] < T) continue;
            b(i, j);
            ans++;
        }
    }
    cout << ans;
    return 0;
}
반응형

관련글 더보기

댓글 영역