以下の2条件を全て満たす文字列Tの事を「良い」文字列と呼ぶことにする
「良い」文字列の例
「良い」文字列ではない例
以下の条件を満たすような2つの関数,encodeとdecodeを実装せよ.
この問題にはencodeフェーズとdecodeフェーズがあり, それぞれ独立にプログラムが実行される.
encodeフェーズのとき, 入力は以下の形式で与えられる.
encode N S
Nは与えられる01列Sの長さである. Sはあなたがencodeするべき01列である. この時の,あなたが提出するプログラムの出力をTとする. Tが良い文字列でない場合は不正解となり,decodeフェーズは実行されない. decodeフェーズのとき,入力は以下の形式で与えられる.
decode M T
Tはencodeフェーズにおけるあなたの出力である. Mは文字列Tの長さである. この時の,あなたが提出するプログラムの出力がencodeフェーズにおけるSと一致する場合,正解となる
この問題では入力Sに対する出力encode(S)の長さに応じて得点が決まる.
全てのテストケースについて, |encode(S)| ≦ |S| + 10 を満たすときこの問題に対する得点が満点となる.
また, |encode(S)| ≦ 2×|S| + 10 を満たす場合, この問題に対する得点は50点となる.
入力
encode 6 001100
出力
ABCBE
encodeフェーズの終了後あなたのプログラムは一旦終了し,次にdecodeフェーズが開始する
入力
decode 5 ABCBE
出力
001100