Codeforces Round #774 (Div. 2) 問題文和訳
- A. Square Counting / Сколько квадратов? (750点)
- B. Quality vs Quantity / Качество против количества (1000点)
- C. Factorials and Powers of Two / Факториалы и степени двойки (1250点)
- D. Weight the Tree / Взвесьте дерево (2000点)
- E. Power Board / Степенная таблица (2500点)
- F. Playing Around the Table / Игра вокруг стола (3000点)
A. Square Counting / Сколько квадратов? (750点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
Luisは数列を失くしてしまいましたが、 と の値は覚えています。数列の要素のうち、 に等しいものの個数を求めることができますか?
与えられた制約のもとでは答えが一意であることは証明できます。
入力
各テストは複数のテストケースが含まれる。1行目にはテストケースの個数 が与えられる。以下、テストケースの記述が続く。
各テストケースの唯一の行には2個の整数 が与えられる。 の値は、上記の制約を満足する数列の和として有効なものであることが保証されている。
出力
各テストケースについて、単一の整数を出力せよ、その数とは数列内の に等しい項の個数である。
入出力例
4 7 0 1 1 2 12 3 12
0 1 3 1
注記
1つ目のテストケースでは、 であるため、全ての数が であり、 となる数は存在しません。
2つ目のテストケースでは、 です。可能な数列は2つあります: 。どちらの場合でも、数 は一度だけ現れます。
3つ目のテストケースでは、 で、このケースでの の可能な最大値です。そのため、数 は数列内に 回現れます。
B. Quality vs Quantity / Качество против количества (1000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
色 について、 は数列内のその色で塗られた要素数、 は数列内のその色で塗られた要素の和を表します。
例えば、与えられた数列が で、次のように彩色します: ( は赤に、 と は青に塗られ、 と は無彩色)。この時、 となります。
かつ となるように数列を塗り分けることができるか判別してください。
入力
各テストは複数のテストケースが含まれる。1行目にはテストケースの個数 が与えられる。以下、テストケースの記述が続く。
各テストケースの1行目には1個の整数 が与えられる、これは与えられる数列の長さである。
各テストケースの2行目には 個の整数 が与えられる、これは与えられる数列である。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、与えられた数列を上記の要件を満たすように塗ることが可能であればYES
と出力せよ、そうでなければNO
と出力せよ。
YES
とNO
はどのレターケースで出力してもよい(例えば、文字列yEs
, yes
, Yes
, YES
は肯定とみなされる)。
入出力例
4 3 1 2 3 5 2 8 6 3 1 4 3 5 4 2 5 1000000000 1000000000 1000000000 1000000000 1000000000
NO YES NO NO
注記
1つ目の入力例では、条件を満たす数列の彩色方法はありません。例えば、次のように彩色したとします: ( は赤、 と は青)。この時、 ですが、 です。そのため、これは条件を満たす数列の彩色方法ではありません。
2つ目の入力例では、問題文で記述されているように塗ることができます。 であることが確認できます。
3つ目の入力例では、条件を満たす数列の彩色方法はありません。例えば、次のように彩色したとします: ( と は赤、 と は青)。この時、 ですが、] です。そのため、これは条件を満たす数列の彩色方法ではありません。
4つ目の入力例では、sumとcountの制約を満たす数列の塗り分けは不可能であることを証明することができます。
C. Factorials and Powers of Two / Факториалы и степени двойки (1250点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
正整数 が与えられます。 が 個の相異なる強力な数の和として表現できるような最小の数 を求めて下さい、もしくは、そのような が存在しないことを判別してください。
入力
各テストは複数のテストケースが含まれる。1行目にはテストケースの個数 が与えられる。以下、テストケースの記述が続く。
各テストケースはただ1つの行から成り、1個の整数 が与えられる。
出力
各テストケースについて、別々の行に答えを出力せよ。
が相異なる強力な数の和として表現できない場合は、 を出力せよ。
そうでない場合、単一の正整数を出力せよ、その数とは、 の可能な最小値である。
入出力例
4 7 11 240 17179869184
2 3 4 1
注記
1つ目のテストケースでは、 は と表現することができ、 と は強力な数です。 は強力な数ではないので、このケースでの の可能な最小値は であることが分かります。
2つ目のテストケースでは、 を3個の強力な数の和として表現できる方法として が考えられます。 を2個以下の強力な数の和として表現することができないことを証明することができます。
3つ目のテストケースでは、 は と表現することができます。強力な数は相異ならなければならないので は有効な表現でないことに注意して下さい。
4つ目のテストケースでは、 であるため、 は強力な数であり、このケースの最小の は です。
D. Weight the Tree / Взвесьте дерево (2000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
各 について、 番目の頂点の重みを とします。その重みが全ての隣接頂点の重みの和と等しい時、その頂点は良いと言います。
初期状態では、全ての頂点の重みは未定義です。木内の良い頂点の数が最大になるように、各頂点に正整数の重みを割り当てて下さい。複数の方法がある場合は、木の全頂点の重みの和を最小にする方法を求めて下さい。
入力
1行目には1つの整数 が与えられる、この数は木の頂点数です。
その後、 行が続く。各行には、頂点 と の間の辺を表す2個の整数 が与えられる。辺が木を形成することは保証されている。
出力
1行目には、2個の整数を出力せよ、その数とは良い頂点の最大数とその最大値に対する重みの和の可能な最小値である。
2行目には、 個の整数 を出力せよ、これらは各頂点に割り当てられた重みである。これらの制約を満たす最適解が存在することは証明することができる。
複数の最適解が存在する場合は、いずれを出力してもよい。
入出力例
4 1 2 2 3 2 4
3 4 1 1 1 1
3 1 2 1 3
2 3 1 1 1
2 1 2
2 2 1 1
9 3 4 7 6 2 1 8 3 5 6 1 8 8 6 9 6
6 11 1 1 1 1 1 1 1 3 1
注記
1つ目のテストケースでの木はこちらです。
2つ目のテストケースでの木はこちらです。
E. Power Board / Степенная таблица (2500点)
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
行と 列の交点にあるセルには ( の 乗)が書かれています。例えば、 であるとき、このボードは次のようになります。
入力
唯一の行には2個の整数 が与えられる、これらはボードの行と列の数である。
出力
1個の整数を出力せよ、その数とはボード上の相異なる整数の数である。
入出力例
3 3
7
2 4
5
4 2
6
注記
問題文には、1つ目のテストケースでのボードが示されています。このケースでは の 個の相異なる整数が書かれています。
2つ目のテストケースでは、ボードは次のようになります。
3つ目のテストケースでは、ボードは次のようになります。
F. Playing Around the Table / Игра вокруг стола (3000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
から までの整数が1つ書かれているカードが 枚あります。 から までの各整数について、ちょうど 枚のカードにこの数が書かれています。
始めに、各プレイヤーがちょうど 枚のカードを持っているように、カードがプレイヤーに分配されます。1ステップで各プレイヤーは自分のカードを1枚選び、右側のプレイヤーに渡します。全プレイヤーが同時にこのステップを実行します。
プレイヤー が持っている全てのカードに整数 が書かれている場合、そのプレイヤーはsolidであるといいます。プレイヤーの目的は、全員がsolidであるカード配置にすることです。 回以内の操作で実現できる方法を求めて下さい。操作数を最小化する必要はありません。
入力
1行目には1個の整数 が与えられる。
それから 行が続く。その 行目には 個の整数 が与えられる、これらは 番目のプレイヤーの初期カードである。
から までの各整数 について、数 が書かれたカードがちょうど 枚あることは保証されている。
出力
1行目には、1個の整数 を出力せよ、これは操作数である。
その後、 行を続けよ。その 行目には 個の整数 を出力せよ。ここで、 は 番目のプレイヤーが右隣のプレイヤーに渡したカードに書かれている数字である。
与えられた制約の中で、必ず答えが存在することを示すことはできる。複数の解がある場合は、いずれかを出力せよ。
入出力例
2 2 1 1 2
1 2 1
3 1 1 1 2 2 2 3 3 3
6 1 2 3 3 1 2 2 3 1 1 2 3 3 1 2 2 3 1
注記
1つ目のテストケースでは、1番目のプレイヤーが数 のカードを、2番目のプレイヤーが数 のカードをパスすると、1番目のプレイヤーは数 のカードを2枚、2番目のプレイヤーは数 のカードを2枚持っていることになります。そして、この操作を行った後、両プレイヤーはsolidとなります。
2つ目のテストケースでは、 回の操作で十分です。操作回数を最小化する必要はないことに注意してください。
*1:西[lwis]、ルイス: 高地ゲルマン語のHlūtwīg(名高い戦い)に由来する名前、Lewis(英)、Louis(仏)、Luigi(伊)、Ludwig(独)等と同語源