1-nの番号が付いたn個のボックスがあります。各ボックスはロックされており、対応する1つのタイプのキー(1〜nの番号も付けられている)のみで開くことができます。これらのキーはボックス内にランダムに散らばっていて(1つのボックスには任意の数のキーがあり、1つのキーには任意の数の重複があります)、すべてのボックスが閉じられます。宝物(番号0)も多くのボックスでロックされています。
すべての宝物を回収するために鍵屋を雇いました。彼は、開いた箱ごとに料金を請求します。キーが既に利用可能なボックスを開くのに料金はかかりません。
入力は各ボックスの内容です。入力の形式を決定できます。
宝物を入手するのに必要な最低コストを出力します。
ノート
- アルゴリズムには時間がかかる場合がありますが、それは無関係です。
- 最短のコードが優先されます。
- 無効な入力を気にする必要はありません。
サンプルデータ
ここで、行iはボックスiに存在するキーを表します。
入力
2 0
3
4 0
5 6 0
6
0
出力
1
入力
2 0
3 0
4 0
6
5 0
出力
3
入力
2 4 0
3 0
1 0
6
5 0
出力
2
入力
1
3 4
2 6
5
出力
0
2
これはおそらくこれに関連していますか?
—
アディソンクランプ
@VoteToClose素敵なビデオ。一般的なものではなく、数学的なパズルと特定のアルゴリズムについて述べていることを除いて、似ています。
—
ghosts_in_the_code
:これは、木とスチールの100のロックボックスについては、このパズルに関連すると思われるpuzzling.stackexchange.com/q/17852/4551
—
XNOR
@ghosts_in_the_codeそれは単純さではなく、柔軟性に関するものです。一般的に、構造化された入力を必要とする課題では、データが前処理されていない限り、便利なリスト形式を使用できます。あなたが持っているような空白で区切られたファイルを意味する可能性のある言語に応じて、またはそれを意味する
—
マーティンエンダー
[[1] [3 4] [] [] [2 6] [5]]
かもしれません{{1},{3,4},{},{},{2,6},{5}}
。このようにして、ほとんどの言語は入力を読むことをささいなことまで減らしi=eval(read())
、課題の楽しい部分に集中することができます。