포럼
문제 USACO0490

HILO

설명

베시는 \(x+0.5\)라는 수를 알고 있다. 여기서 \(x\)\(0\) 이상 \(N\) 이하의 어떤 정수이다(\(1\le N\le 2 \cdot 10^5\)).

엘시는 이 수를 맞히려 하고 있다. 엘시는 \(1\) 이상 \(N\) 이하의 어떤 정수 \(i\)에 대해 "\(i\)는 높은가 낮은가?" 형태의 질문을 할 수 있다. 베시는 \(i\)\(x+0.5\)보다 크면 "HI", \(i\)\(x+0.5\)보다 작으면 "LO"라고 답한다.

엘시는 베시의 수를 맞히기 위해 다음 전략을 세운다. 추측을 시작하기 전에, 엘시는 \(1\)부터 \(N\)까지의 모든 수가 정확히 한 번씩 등장하는 \(N\)개의 수의 목록을 만든다(다시 말해, 이 목록은 크기 \(N\)의 순열이다). 그런 다음 목록을 따라가며 목록에 등장하는 순서대로 수를 추측한다.

다만, 엘시는 불필요한 추측은 건너뛴다. 즉, 엘시가 어떤 수 \(i\)를 추측하려고 할 때 이전에 어떤 \(j < i\)를 추측했고 베시가 "HI"라고 답했다면, 엘시는 \(i\)를 추측하지 않고 목록의 다음 수로 넘어간다. 마찬가지로, 어떤 수 \(i\)를 추측하려고 할 때 이전에 어떤 \(j > i\)를 추측했고 베시가 "LO"라고 답했다면, 엘시는 \(i\)를 추측하지 않고 목록의 다음 수로 넘어간다. 이 전략을 사용하면 엘시가 어떤 순열을 만들더라도 항상 \(x\)를 유일하게 결정할 수 있음을 증명할 수 있다.

베시의 "HI" 또는 "LO" 응답을 모두 이어붙여 하나의 문자열 \(S\)를 만들었을 때, 베시가 "HILO"라고 말한 횟수는 \(S\)의 길이 \(4\)인 부분 문자열 중 "HILO"와 같은 것의 개수이다.

베시는 엘시가 이 전략을 사용할 것임을 알고 있다. 게다가 엘시가 사용할 정확한 순열도 알고 있다. 하지만 베시는 어떤 \(x\) 값을 선택할지 아직 정하지 않았다.

\(x\) 값에 대해 베시가 "HILO"를 몇 번 말하게 되는지 구하도록 도와주자.

출제자: Richard Qi

제약

배점

  • 테스트 1-4는 \(N \leq 5000\)을 만족한다.
  • 테스트 5-8은 균등하게 무작위로 생성된 순열이다.
  • 테스트 9-20은 추가 제약이 없다.

출제자: Richard Qi

입력 형식

첫째 줄에 \(N\)이 주어진다.

둘째 줄에 엘시의 크기 \(N\)인 순열이 주어진다.

출력 형식

\(0\)부터 \(N\)까지의 각 \(x\)에 대해, 베시가 HILO를 말하는 횟수를 한 줄에 하나씩 출력한다.

예제 1
입력
5
5 1 2 4 3
출력
0
1
1
2
1
0
설명

For \(x=0\), Bessie will say "HIHI," for a total of zero "HILO"s.

For \(x=2\), Bessie will say "HILOLOHIHI," for a total of one "HILO".

For \(x=3\), Bessie will say "HILOLOHILO", for a total of two "HILO"s.

문제 정보

riseoj 작성

출처 올림피아드 > USACO > 2021-2022 > December > Gold

태그

평가 및 의견

HILO

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

HILO

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8