- 문제 링크 : 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인 정사각형과 같다.
정사각형이 스펀지의 범위를 벗어나는 경우만 고려해서 구현해주면 된다.
728x90
'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 |