PS

BOJ 31418 : 스펀지

lickelon 2024. 2. 22. 22:25
  • 문제 링크 : boj.kr/31418
  • 난이도 : S4
  • 태그 : 구현
 

31418번: 스펀지

첫 번째 줄에 스펀지의 가로 길이 $W$와 세로 길이 $H$, 바이러스의 수 $K$, raa가 바이러스를 관찰할 시간 $T$가 공백으로 구분되어 주어진다. $(1 \leq W, H, K \leq 10^6;$ $0 \leq T \leq 10^6)$ 이어서 $K$줄에

www.acmicpc.net


코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

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

    ll W, H, K, T;
    cin >> W >> H >> K >> T;
    ll ans = 1;
    for(int i = 0; i < K; i++) {
        ll x, y;
        cin >> x >> y;
        ans *= (min(W, x + T) - max(1ll, x - T) + 1) % 998244353;
        ans %= 998244353;
        ans *= (min(H, y + T) - max(1ll, y - T) + 1) % 998244353;
        ans %= 998244353;
    }
    cout << ans;

    return 0;
}

풀이

바이러스의 가능한 분포는 변이 2T+1인 정사각형과 같다.

정사각형이 스펀지의 범위를 벗어나는 경우만 고려해서 구현해주면 된다.

'PS' 카테고리의 다른 글

BOJ 2559 : 수열  (0) 2024.02.24
BOJ 31421 : 호떡 뒤집기  (0) 2024.02.23
BOJ 31423 : 신촌 통폐합 계획  (0) 2024.02.21
BOJ 6504 : 킬로미터를 마일로  (0) 2024.02.20
BOJ 31420 : 문자열 - 그래프 매칭  (1) 2024.02.19