QOJ.ac

QOJ

حد الوقت: 2.0 s حد الذاكرة: 1024 MB مجموع النقاط: 100

#14502. 정신승리

الإحصائيات

무작위성은 어디에나 존재하며 인생의 시작부터 끝까지 함께합니다. 매우 중요한 경기에서조차 승패를 결정짓는 핵심 요소는 운일 때가 많습니다.

2035년, $n$명의 《클래시 로얄》 게임 열성 팬들이 누가 더 실력이 뛰어난지 비교하고 싶어 합니다. 공정함을 위해 그들은 서로 한 번씩 대결하기로 했고, 총 $\frac{n(n-1)}{2}$번의 경기를 치렀습니다.

하지만 당시의 《클래시 로얄》은 완전히 "가위바위보" 게임으로 변질되었습니다! 따라서 모든 경기에서 양측이 승리할 확률은 각각 50%이며, 서로 독립적입니다.

패배한 플레이어들은 당연히 아쉬움이 남습니다. "정신 승리"를 얻기 위해 그들은 "간접 승리"라는 개념을 도입했습니다. $u$가 $v$를 $k$-간접 승리한다는 것은, $k$명의 사람 $a_1, \dots, a_k$가 존재하여 $u$가 $a_1$을 이기고, $a_1$이 $a_2$를 이기고, $a_i$가 $a_{i+1}$을 이기며($\forall i \in [1, k)$), $a_k$가 $v$를 이기는 경우를 의미합니다.

특히, $u$가 $v$를 직접 이겼다면 이를 0-간접 승리라고 합니다.

플레이어들은 새로운 의문을 갖게 되었습니다. 두 플레이어 $u$와 $v$가 주어졌을 때, 최소 몇 단계의 간접 관계를 거쳐야 $u$가 $v$를 이겼다고 할 수 있을까요?

다시 말해, $u$가 $v$를 $k$-간접 승리할 수 있게 하는 최소 정수 $k$를 구해야 합니다. 아쉬움이 남는 플레이어들이 많기 때문에, 당신은 $q$개의 질문에 답해야 합니다.

입력

주의: 본 문제는 입출력 양이 많으므로, C++의 scanf/printfcin/cout의 스트림 동기화 해제와 같이 빠른 입출력 방식을 사용하는 것을 권장합니다. 입출력이 느린 언어는 피하는 것이 좋습니다.

첫 번째 줄에 두 정수 $n, q$ ($2 \le n \le 5000, 1 \le q \le 10^5$)가 주어집니다.

다음 $n-1$개의 줄 중 $i$번째 줄은 길이가 $n-i$인 01 문자열입니다. 여기서 $j$번째($1 \le j \le n-i$) 숫자가 1이면 $i$번째 사람이 $i+j$번째 사람을 이겼음을 의미하고, 0이면 $i+j$번째 사람이 $i$번째 사람을 이겼음을 의미합니다. 승패 관계는 독립적으로 무작위 생성되며, 확률은 각각 50%입니다.

다음 $q$개의 줄 중 $i$번째 줄에는 두 정수 $u_i, v_i$ ($1 \le u_i, v_i \le n, u_i \neq v_i$)가 주어지며, 이는 $i$번째 질문을 의미합니다.

출력

$q$개의 줄을 출력합니다. $i$번째 줄에는 $u_i$가 $v_i$를 $k$-간접 승리하게 하는 최소 $k$를 출력합니다. 특히, 어떤 $k$에 대해서도 $u_i$가 $v_i$를 $k$-간접 승리할 수 없다면 -1을 출력합니다.

예제

예제 입력 1

4 12
110
11
1
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3

예제 출력 1

0
0
1
1
0
0
1
2
0
0
1
1

예제 입력 2

5 20
0011
001
01
1
1 2
1 3
1 4
1 5
2 1
2 3
2 4
2 5
3 1
3 2
3 4
3 5
4 1
4 2
4 3
4 5
5 1
5 2
5 3
5 4

예제 출력 2

1
1
0
0
0
2
1
0
0
0
1
0
1
0
0
0
-1
-1
-1
-1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.