포럼
문제 USACO0494

HILO

설명

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

엘시는 이 수를 맞히려 하고 있다. 엘시는 \(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\) 값을 이미 정했지만, 엘시가 어떤 순열을 사용할지는 모른다. 엘시가 선택할 수 있는 모든 순열에 대해 베시가 "HILO"를 말하는 횟수의 합을 \(10^9+7\)로 나눈 나머지를 구하는 것이 목표이다.

출제자: Richard Qi

제약

배점

  • 테스트 케이스 3-10은 \(N\le 50\)을 만족한다.
  • 테스트 케이스 11-18은 \(N\le 500\)을 만족한다.
  • 테스트 케이스 19-26은 추가 제약이 없다.

출제자: Richard Qi

입력 형식

입력은 한 줄로 이루어지며, \(N\)\(x\)가 주어진다.

출력 형식

HILO의 총 횟수를 \(10^9+7\)로 나눈 나머지를 출력한다.

예제 1
입력
4 2
출력
17
설명

In this test case, Bessie's number is \(2.5\).

For example, if Elsie's permutation is \((4,1,3,2)\), then Bessie will say
"HILOHILO," for a total of two "HILO"s. As another example, if Elsie's
permutation is \((3,1,2,4)\), then Bessie will say "HILOLO," for a total of one
"HILO."

예제 2
입력
60 10
출력
508859913
설명

Make sure to output the sum modulo \(10^9+7\).

문제 정보

riseoj 작성

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

태그

평가 및 의견

HILO

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

Log in to rate problems.

개별 의견

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

풀이 제출

HILO

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