소를 던지면 해당 위치에 있는 건초더미가 폭발하고, 이는 연쇄적으로 범위 1,2,3,,, 이렇게 터진다.
이 때 원코인으로 터트릴 수 있는 가장 많은 건초더미의 수를 출력하면 된다.
처음 던졌을 때 터트릴 건초가 있어야 연쇄작용이 일어나므로 던지는 위치는 xn중에서 고른다.
그리고 범위를 1씩 증가시켜 나가면서 왼, 오른쪽으로 찾아나가면서 최대범위를 구하고
그 범위안에 있는 건초의 개수를 찾으면 된다.
n이 최대 100밖에 안되므로 리니어하게 찾아도 되고 이분탐색으로 찾아도 된다.
난 이분탐색을 사용했다.
#include <stdio.h> #include <algorithm> using namespace std; int n, a[101]; int main() { scanf("%d", &n); for (int i = 0; i < n; ++i) scanf("%d", a + i); sort(a, a + n); int ans = 1; for (int i = 0; i < n; ++i) { int l = i, r = i, cnt = 1; while (1) { int tl = lower_bound(a, a + n, a[l] - cnt) - a; if (tl == l) break; l = tl; cnt++; } cnt = 1; while (1) { int tr = lower_bound(a, a + n, a[r] + cnt) - a; if (tr >= n || a[tr] > a[r] + cnt) tr--; if (tr == r) break; r = tr; cnt++; } ans = max(ans, r - l + 1); } printf("%d\n", ans); return 0; } | cs |
'BOJ' 카테고리의 다른 글
14173 Square Pasture (0) | 2018.11.10 |
---|---|
11978 Mowing the Field (Bronze) (0) | 2018.11.10 |
14457 Cow Tipping (0) | 2018.11.10 |
1909 냄새 싫어 (0) | 2018.11.07 |
5431 책 쌓기 (0) | 2018.11.07 |