RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
KOI00064

일이 이어져야 좋다

Platinum I 플래티넘 I
난이도
2s
시간 제한
1024MB
메모리 제한
1
맞았습니다!!
1
제출 수
100.0%
정답률
레이팅

의견: 0

설명

양의 정수 N으로 만들어지는 문자열 \(S_{N}\)은 다음과 같이 정의된다. 아래에서 ⌊N/2⌋은 N을 2로 나눈 몫이다.

  1. \(N = 1\)인 경우: \(S_{N}\) = 1 (즉, 1 한 글자로 이루어진 문자열)
  2. \(N \ge 2\)이고 N이 짝수인 경우: \(S_{N}\) = \(S_{⌊N/2⌋}\) 0 \(S_{⌊N/2⌋}\) (즉, 0 한 글자 좌우에 \(S_{⌊N/2⌋}\)가 이어진 문자열)
  3. \(N \ge 2\)이고 N이 홀수인 경우: \(S_{N}\) = \(S_{⌊N/2⌋}\) 1 \(S_{⌊N/2⌋}\) (즉, 1 한 글자 좌우에 \(S_{⌊N/2⌋}\)가 이어진 문자열)

위의 약속에 따라 \(S_{13}\)을 구해보면 다음과 같다.

  • 위의 약속에서 적용이 가능한 것은 3번이므로 \(S_{13}\) = \(S_{6}\) 1 \(S_{6}\)임을 알수 있다.
  • \(S_{6}\)은 위의 약속의 2번에 의해 \(S_{3}\) 0 \(S_{3}\)이 되므로 \(S_{13}\) = \(S_{6}\) 1 \(S_{6}\) = \(S_{3}\) 0 \(S_{3}\) 1 \(S_{3}\) 0 \(S_{3}\)이다.
  • \(S_{3}\)은 위의 약속의 3번과 1번을 순서대로 적용하면 111이 된다.
  • 따라서 \(S_{13}\) = 111011111110111이다.

양의 정수 N이 주어질 때, 아래와 같은 형태의 질의 Q개를 해결하는 프로그램을 작성하라.

q (\(1 \le q \le Q\))번째 질의는 세 개의 정수 (\(i_{q},j_{q},k_{q}\))가 주어질 때 다음과 같다: \(S_{N}[i_{q}\)..\(j_{q}\)]에서 0을 최대 \(k_{q}\)개까지 포함하는 가장 긴 부분문자열의 길이는?

위의 예에서 질의가 (1, 15, 0)이라면 가장 긴 부분문자열은 1로만 이루어져야 한다. 또, 질의가 \(S_{13}\) 전체에서 찾기를 요구하고 있으므로 해당 문자열의 길이는 7이다.

만약, (2, 14, 2)이라면 질의는 \(S_{13}\)의 두번째부터 14번째 문자까지에서 0이 최대 2개인 가장 긴 부분문자열을 찾으라고 요구한다. 그런데 \(S_{13}\)[2..14] = 1101111111011에는 0이 2개 뿐이므로 그 전체가 답이 되고, 그 길이는 13이다.

Hint.

부분문자열의 정의 길이가 l인 문자열 s와 \(1 \le i \le j \le l\)인 두 정수 i와 j에 대해, s[i..j]는 s의 i번째 문자에서부터 j번째 문자까지를 모두 순서대로 포함하는 문자열이며, 이러한 문자열들을 문자열 s의 부분문자열이라고 한다.

예를 들어 s가 0100101이라면, s[3..5]는 001이고, s[4..7]은 0101이다. 따라서 0010101은 문자열 0100101의 부분문자열이다. 하지만 1010은 문자열 0100101의 부분문자열이 아니다.

제약
  • \(1 \le N \le 10^{18}\)
  • \(1 \le Q \le 10\,000\)
  • \(\sum_{q=1}^{Q} k_q \le 10\,000\). 즉, 모든 질의에서 주어지는 \(k\)의 값을 더하면 최대 \(10\,000\) 이다.
  • 모든 \(1 \le q \le Q\) 에 대해, \(1 \le i_q \le j_q \le |S_N|\).
입력 형식

첫 번째 줄에 N과 질의의 개수 Q가 정수로 주어진다.

다음 Q개의 줄에 질의들이 한 줄에 하나씩 주어진다. 이 중 q (\(1 \le q \le Q\))번째 줄에는 세 개의 정수 \(i_{q},j_{q},k_{q}\)가 공백 하나씩을 사이로 두고 주어진다.

출력 형식

각 질의에 대한 답을 질의가 주어진 순서대로 각각 한줄에 하나씩 출력한다.

서브태스크
서브태스크점수설명

1

5점

\(N = 2^t\) 가 성립하는 음이 아닌 정수 \(t\)가 존재한다. 즉, \(N\)\(1, 2, 4, 8, \ldots\) 와 같이 \(2\)의 거듭제곱 중 하나이다.

2

11점

\(N \le 1\,000\).

3

17점

\(\sum_{q=1}^{Q}(j_q - i_q + 1) \le 100\,000\). 즉, 모든 질의에서 \(j - i + 1\)의 값을 더하면 최대 \(100\,000\) 이다.

4

25점

모든 \(q\) (\(1 \le q \le Q\)) 에 대해, \(k_q = 0\).

5

42점

추가 제약 조건 없음.

예제 1
입력
13 3
1 15 0
2 14 2
2 8 0
출력
7
13
4
문제 정보

riseoj 작성

출처 올림피아드 > 한국정보올림피아드 > KOI 2021 > 2차 대회 > 중등부 3번

평가 및 의견

일이 이어져야 좋다

개요
출제자 난이도 Platinum I 플래티넘 I 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

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

풀이 제출

일이 이어져야 좋다

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