QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 1024 MB Total points: 100 Hackable ✓

#21428. 遥かな歌

Statistics

君の声を聞かせて、旅の物語を教えて——

楽しかったことも、つらかったことも、そして心に刻まれた出会いも。

Far Away Song - anemoi

問題文

長さ $n$ の文字列 $S$ が与えられます。添字は $1$ から始まります。$S(i, j)=S_iS_{i+1}\cdots S_j$ と書き、$S$ の $i$ 番目の文字から $j$ 番目の文字までからなる部分文字列を表します。

空でない文字列 $B$ が文字列 $X$ の接頭辞であると同時に接尾辞でもあり、$|B|<|X|$ を満たすとき、$B$ を $X$ の Border と呼びます。ここで、$|X|$ は文字列 $X$ の長さを表します。

最初、あなたは部分文字列 $S(1, n)$ にいます。1 回のジャンプを次のように行います。

  1. 現在いる部分文字列の中から、部分文字列 $X$ を選びます。
  2. $2|B|\ge |X|$ を満たす $X$ の Border $B$ を選びます。
  3. $B$ が $X$ の接頭辞として現れる部分文字列、または接尾辞として現れる部分文字列にジャンプします。どちらを選んでもかまいません。

例えば、$S$ が aabaaba で、あなたが $S(1, 7)$ にいるとき、$X=S(2, 7)=$ abaaba を選ぶことができます。その Border aba の長さはちょうど $|X|$ の半分なので、$S(2, 4)$ または $S(5, 7)$ にジャンプできます。

各 $1\le i\le n$ について、$S(1, n)$ から出発して最終的に $S(i, i)$ に到達するときのジャンプ回数の最大値を求めてください。到達できない場合、答えは $-1$ です。ジャンプを一度も行わなくてもかまいません。

複数のテストケースがあります。

入力

1 行目には整数 $T$ が与えられます。これはテストケース数を表します。

続いて各テストケースが順に与えられます。各テストケースでは、文字列 $S$ を表す 1 行が与えられます。

出力

各テストケースについて、$n$ 個の整数を 1 行に出力してください。$i$ 番目の整数は $S(i, i)$ に対する答えとします($S(i, i)$ に到達できない場合は -1 を出力してください)。

入出力例

入力 1

5
abbababbab
bbabbaabbabbaaabab
babbaaaaabaabaaabaaba
baabaabaabaacaabaabaabaacaabaabaabaac
bbaabaaaaabbbbbbbababaabaabaabbabababbbabbabbabbba

出力 1

-1 2 2 -1 -1 -1 2 2 -1 -1
3 3 -1 3 3 2 2 3 3 -1 3 3 2 2 2 -1 -1 -1
-1 -1 1 1 4 4 4 4 4 -1 3 3 -1 3 3 3 -1 3 3 -1 -1
-1 5 5 -1 5 5 -1 5 5 -1 5 5 -1 5 5 -1 5 5 -1 5 5 -1 5 5 -1 5 5 -1 5 5 -1 5 5 -1 5 5 -1
1 1 2 2 -1 4 4 4 4 4 6 6 6 6 6 6 6 -1 -1 -1 -1 3 3 -1 3 3 -1 3 3 1 1 -1 -1 -1 -1 -1 2 3 3 -1 3 3 -1 3 3 -1 3 3 2 -1

注記

1 番目のテストケースでは、$S=$ abbababbab であり、長さ $5$ の接頭辞と接尾辞はいずれも abbab です。次のように 2 回のジャンプを行うことができます。

  • まず $S(1, 5)$ にジャンプし、次に $S(2, 3)=$ bb を選び、$S(2, 2)$ または $S(3, 3)$ にジャンプします。
  • まず $S(6, 10)$ にジャンプし、次に $S(7, 8)=$ bb を選び、$S(7, 7)$ または $S(8, 8)$ にジャンプします。

最初のジャンプで上記の 2 つの abbab のいずれかに移った場合に限り、さらにジャンプできます。その次のジャンプでは 1 文字にしか到達できないため、これら 4 つの位置へのジャンプ回数の最大値はすべて $2$ です。

他の位置にはジャンプによって到達できないため、答えは $-1$ です。

入出力例 2

添付ファイルの wind2.in と wind2.ans を参照してください。この例は小課題 3 の制約を満たします。

入出力例 3

添付ファイルの wind3.in と wind3.ans を参照してください。この例は小課題 5 の制約を満たします。

入出力例 4

添付ファイルの wind4.in と wind4.ans を参照してください。この例は小課題 6 の制約を満たします。

入出力例 5

添付ファイルの wind5.in と wind5.ans を参照してください。この例は小課題 8 の制約を満たします。

制約

この問題では、適切な小課題間の依存関係が設定されています。

小課題 $n\le$ $\sum n\le$ 特殊な性質 得点
$1$ $18$ $500$ なし $5$
$2$ $500$ $14$
$3$ $5\times 10^3$ $5\times 10^3$ $21$
$4$ $10^5$ $10^5$ $18$
$5$ $2\times 10^5$ $2\times 10^5$ A $15$
$6$ B $13$
$7$ C $2$
$8$ なし $12$

特殊な性質 A:空でない文字列 $P$ が存在し、$S$ は無限反復文字列 $P^{\infty}$ の接頭辞であり、$|P|\le 10$ を満たします。

特殊な性質 B:$S$ はランダムに生成されます。すなわち、$S$ の各文字は、大きさが $\ge 2$ の文字集合から一様ランダムに選ばれます。

特殊な性質 C:すべての $1\le i<n$ について、$S_i\neq S_{i+1}$ が成り立ちます。

すべての入力において、$1\le n\le 2\times 10^5$ が保証され、1 つの入力ファイル内のすべてのテストケースの文字列の長さの総和は $\sum n\le 2\times 10^5$ を満たします。文字列 $S$ は英小文字のみからなります。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

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.