QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 1024 MB Total points: 100

#14502. 精神勝利

Statistics

ランダム性は至る所に存在し、人生の始まりから終わりまでを貫いています。極めて重要な試合においてさえ、勝敗を決める鍵が単なる運であることは珍しくありません。

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}$ に勝利し ($i \in [1, k)$)、$a_k$ が $v$ に勝利することを指します。 特に、$u$ が $v$ に直接勝利した場合、0-間接勝利と呼びます。

プレイヤーたちは新たな疑問を抱きました。2人のプレイヤー $u$ と $v$ が与えられたとき、$u$ が $v$ に勝利したと言えるまで、最小で何層の間接関係を経る必要があるでしょうか?

言い換えれば、$u$ が $v$ に対して $k$-間接勝利できるような最小の整数 $k$ を求める必要があります。納得のいかないプレイヤーが非常に多いため、$q$ 個のクエリに答える必要があります。

入力

注意:本問題の入出力量は大きいため、高速な入出力方式(C++であれば scanf/printf や、同期をオフにした cin/cout など)の使用を推奨します。入出力が遅い言語の使用は避けることを推奨します。

1行目に2つの整数 $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$ 番目の人に勝利したことを表し、そうでなければ $i+j$ 番目の人が $i$ 番目の人に勝利したことを表します。勝敗関係は独立にランダム生成され、確率はそれぞれ 50% であることが保証されます。

続く $q$ 行には、各クエリとして2つの整数 $u_i, v_i$ ($1 \le u_i, v_i \le n, u_i \neq v_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.