포럼
문제 USACO0711

소 정렬하기

설명

길이 \(N\)의 비트 문자열 \(s_{1\dots N}\) (\(2\le N\le 10^9\))이 주어진다. 한 번의 연산으로, 다음 조건이 모두 참이면 구간 \(s_{l\dots r}\)을 뒤집을 수 있다.

  1. 구간의 크기가 짝수이다.
  2. 구간의 앞쪽 절반은 한 종류의 문자(\(0\) 또는 \(1\))로 이루어지고, 뒤쪽 절반은 반대 문자로 이루어진다.
  3. \(l = 1\)이거나 \(s_{l-1} \neq s_l\)이다.
  4. \(r = N\)이거나 \(s_{r+1} \neq s_r\)이다.

모든 \(1\)을 맨 앞으로 옮기기 위한 최소 연산 횟수를 구하거나, 불가능함을 보고하시오. 가능하다면, 이 최솟값을 달성하는 연산 수열의 개수도 \(10^9+7\)로 나눈 나머지로 출력한다.

문제 제공: Sujay Konda

제약

채점 방식

  • 입력 3: \(N \leq 10\), 모든 테스트가 서로 다르다
  • 입력 4: \(R\le 10\)
  • 입력 5-8: \(R\le 100\), 모든 테스트에 대한 \(R^2\)의 합이 \(10^5\)를 넘지 않으며, 최소 연산 횟수가 \(R/2-1\)과 같음이 보장된다.
  • 입력 9-12: \(R\le 100\), 모든 테스트에 대한 \(R^2\)의 합이 \(10^5\)를 넘지 않는다.
  • 입력 13-16: 추가 제약 조건이 없다.

문제 제공: Sujay Konda

입력 형식

첫째 줄에 독립적인 테스트의 수 \(T\) (\(1 \leq T \leq 2026\))가 주어진다. 각 테스트는 다음 형식으로 주어진다.

비트 문자열은 압축된 형식으로 주어진다. 첫째 줄에 문자열의 런 수 \(R\) (\(2\le R\le 800\))와 문자열의 첫 문자(0 또는 1)가 주어진다.

다음 줄에 \(s\)에서 같은 문자로 이루어진 극대 연속 블록들의 길이인 \(R\)개의 정수 \(l_1,l_2,l_3,\ldots l_R\) (\(0)가 공백으로 구분되어 주어진다. \(N=\sum_{i=1}^Rl_i\le 10^9\)임이 보장된다.

추가로, 모든 테스트에 대한 \(R^2\)의 합은 \(1.5\cdot 10^6\)을 넘지 않음이 보장된다.

출력 형식

각 테스트 케이스마다, 모든 \(1\)을 맨 앞으로 옮기기 위한 최소 연산 횟수를 출력하거나 불가능하면 \(-1\)을 출력하고, 이 최솟값을 달성하는 연산 수열의 개수를 \(10^9+7\)로 나눈 나머지로 함께 출력한다.

예제 1
입력
9
2 0
1 1
2 1
1 1
2 1
2 1
2 0
1 2
5 0
1 1 1 2 1
3 0
1 2 1
8 0
1 1 2 1 1 2 1 1
6 0
3 3 1 2 2 1
7 0
5 1 1 3 2 1 1
출력
1 1
0 1
0 1
-1 0
2 1
-1 0
4 7
3 1
4 1
설명

Here is the sequence of two operations for the fifth testcase:
\(010110 \to 100110 \to 111000.\)

예제 2
입력
5
2 1
1 1
4 1
1 1 1 1
6 1
1 1 1 1 1 1
8 1
1 1 1 1 1 1 1 1
10 1
1 1 1 1 1 1 1 1 1 1
출력
0 1
1 1
2 1
3 3
4 9
설명

In all of these test cases, the minimum number of operations equals \(R/2-1\).

Here are all three possible sequences of three operations for the fourth test
case:

(1)
   10101010
-> 11001010
-> 11001100
-> 11110000

(2)
   10101010
-> 10110010
-> 10001110
-> 11110000

(3)
   10101010
-> 10101100
-> 11001100
-> 11110000
문제 정보

riseoj 작성

출처 올림피아드 > USACO > 2025-2026 > US Open > Platinum

태그

평가 및 의견

Arranging Cows

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

Log in to rate problems.

개별 의견

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

풀이 제출

Arranging Cows

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