$O(n^2)$
i번 건물에서 j(j>i)번 건물을 보고 번호를 1씩 증가시킨다 하자.
두 건물을 이은 직선의 기울기가 지금까지의 것보다 큰 경우에만 두 건물 사이에서 서로를 볼 수 있다.
#include<cstdio> #include<algorithm> int n, a[50], b[50]; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", a + i); for (int i = 0; i < n; i++) { double t = -9e9, m; for (int j = i + 1; j < n; j++) { m = (double)(a[j] - a[i]) / (j - i); if (m > t) t = m, b[i]++, b[j]++; } } printf("%d", *std::max_element(b, b + n)); return 0; }
댓글 없음 :
댓글 쓰기