Educational Codeforces Round 108のきろく
問題文和訳はこちら
- A. Red and Blue Beans / Красные и синие мармеладки
- B. The Cake Is a Lie / Торт - это ложь
- C. Berland Regional / Берляндский отбор
- D. Maximum Sum of Products / Максимальная сумма произведений
- E. Off by One / Сдвиг на один: 未提出
- F. Chests and Keys / Сундуки и ключи (実行時間制限: 3 sec): 未提出
- 結果、感想
A. Red and Blue Beans / Красные и синие мармеладки
赤い豆の方が数が少ないとします(多い場合は赤と青を入れ替える)。このとき 個の小包に分けることができ、各ポケットに青豆を 個以上 個以下入れることができるので のとき条件を満たします。
B. The Cake Is a Lie / Торт - это ложь
どの経路を辿ったとしてもセル へ到達するのにかかる費用は burle となります。以下はその証明です。
のとき より成立。
または のとき経路は1通り(それぞれずっと右、下)であり、それぞれ費用は より成立します。
これら以外のセル については についての数学的帰納法で示せます。 について成立を仮定します。このマスに辿り着くには
- セル から右に1マス
- セル から下に1マス
のいずれかであり、このとき費用は帰納法の仮定を利用してそれぞれ より成立するため、これで証明ができました。
C. Berland Regional / Берляндский отбор
大学 の学生数を とすると、チームメンバー数が のとき チームができ、 人が参加します。各大学について強い順に学生をソートし、累積和をとっておくことで高速に計算することができます。
D. Maximum Sum of Products / Максимальная сумма произведений
全ての部分列について計算すると組み合わせが で、和の計算が より なので間に合いません。
反転する部分列の中心を固定し、幅を (両方向に )ずつ大きくすることで和の計算(更新)を に落とすことができ、間に合うようになります。
E. Off by One / Сдвиг на один: 未提出
2重の意味でグラフなのかこれ。さっぱりです。
F. Chests and Keys / Сундуки и ключи (実行時間制限: 3 sec): 未提出
ゲームはやっぱり苦手...
結果、感想
Highest更新!! Dまで速く通せたのが幸いでした
Educational Codeforces Round 108 問題文和訳
- A. Red and Blue Beans / Красные и синие мармеладки
- B. The Cake Is a Lie / Торт - это ложь
- C. Berland Regional / Берляндский отбор
- D. Maximum Sum of Products / Максимальная сумма произведений
- E. Off by One / Сдвиг на один
- F. Chests and Keys / Сундуки и ключи
A. Red and Blue Beans / Красные и синие мармеладки
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- 少なくとも1つの赤い豆をふくむ (つまり、赤い豆の個数 )
- 少なくとも1つの青い豆をふくむ (つまり、青い豆の個数 )
- 赤と青の豆の個数の差は 以下 (つまり、)
全ての豆を分配することができるでしょうか?
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
各テストケースの1行目にして唯一の行には3つの整数 が与えられる、これらは赤と青の豆の個数と各小包内の個数の最大絶対差である。
出力
各テストケースについて、全ての豆を分配できる場合、YES
と出力せよ。そうでなければNO
と出力せよ。
各文字はどの活字ケースで出力してもよい(したがって、例えばyEs
, yes
, Yes
, YES
は全て肯定の答えとして見做される)。
入出力例
4 1 1 0 2 7 3 6 1 4 5 4 0
YES YES NO NO
注記
1つ目のテストケースでは、赤い豆1個と青い豆1個で小包を1つ作ることができます。絶対差は となります。
2つ目のテストケースでは、2つの小包を作ることができます。1つ目の小包には赤い豆1個と青い豆4個、2つ目の小包には赤い豆1個と青い豆3個が入ります。
3つ目のテストケースでは、 なので、赤豆6個と青豆1個の小包を1つしか作ることができません。絶対差は となってしまいます。
4つ目のテストケースでは、 なので、それぞれの小包には同じ数の赤い豆と青い豆が入っているはずですが、 です。
B. The Cake Is a Lie / Торт - это ложь
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
貴方は右や下の隣接するセルに移動することができます。言い合えれば、セル に立っているとすると、次のことを行うことができます。
- セル へ右に移動する。費用として burle*1かかる
- セル へ下に移動する。費用として burleかかる
ちょうど burleでセル に到達することができるでしょうか?
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
各テストケースの1行目にして唯一の行には3つの整数 が与えられる、これらは格子の大きさと支払わなければならないちょうどの金額である。
出力
各テストケースについて、ちょうど burleでセル に到達することができる場合、YES
と出力せよ。そうでなければNO
と出力せよ。
各文字はどの活字ケースで出力してもよい(したがって、例えばyEs
, yes
, Yes
, YES
は全て肯定の答えとして見做される)。
入出力例
6 1 1 0 2 2 2 2 2 3 2 2 4 1 4 3 100 100 10000
YES NO YES NO YES NO
注記
1つ目のテストケースでは、すでに目的セルにいるので、 burleかかります。
2つ目、3つ目、4つ目のテストケースでは、 から への経路は2つあります: と です。どちらもコストは burleなので、これが唯一の金額です。
5つ目のテストケースでは、 から への道は1つしかなく、コストは burleです。
C. Berland Regional / Берляндский отбор
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
Поликарп、これからルールを決めなければなりません。特に、1チームのメンバー数です。
1チームの大きさを整数 とした時、各大学は最も強い(プログラミングスキル が最も高い) 人を第一チームに、次に強い 人を第二チームに、と言う風にチームに送り込むことをПоликарпは知っています。残った学生が 人に満たない場合は、チームを組むことができません。1チームも送り出さない大学があるかもしれないことに注意してください。
地域の強さとは、その場にいるすべてのチームのメンバーのスキルの合計です。チームが1つもない場合は、強さは です。
から まで をそれぞれ選んだ時の地域の強さを求めるПоликарпの手助けをしてください。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
各テストケースの1行目には単一の整数 が与えられる、これは大学や学生の数である。
各テストケースの2行目には 個の整数 が与えられる、これらは 番目の学生が在籍している大学である。
各テストケースの3行目には 個の整数 が与えられる、これらは 番目の学生のプログラミングスキルである。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、 個の整数を出力せよ: これらはチームの大きさをそれぞれ選んだ時の地域の強さ、すなわち、現在の全てのチームのメンバーのスキルの合計である。
入出力例
4 7 1 2 1 2 1 2 1 6 8 3 1 5 1 5 10 1 1 1 2 2 2 2 3 3 3 3435 3014 2241 2233 2893 2102 2286 2175 1961 2567 6 3 3 3 3 3 3 5 9 6 7 9 7 1 1 3083
29 28 26 19 0 0 0 24907 20705 22805 9514 0 0 0 0 0 0 43 43 43 32 38 43 3083
注記
1つ目のテストケースでは、各 について各大学のチームは次のようになります。
-
- 大学 :
- 大学 :
-
- 大学 :
- 大学 :
-
- 大学 :
- 大学 :
-
- 大学 :
D. Maximum Sum of Products / Максимальная сумма произведений
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
配列 の部分列(連続した部分セグメント)を高々1つ反転させることができます。
和 を最大化するような部分列を反転させることが課題です。
入力
1行目には1つの整数 が与えられる。
2行目には 個の整数 が与えられる。
3行目には 個の整数 が与えられる。
出力
単一の整数を出力せよ、その整数は の高々1つの部分列(連続した部分セグメント)を反転させたのちの和の可能な最大値である。
入出力例
5 2 3 2 1 3 1 3 2 4 2
29
2 13 37 2 4
174
6 1 8 7 6 3 6 5 9 6 8 8 6
235
注記
1つ目の入出力例では部分列 を反転させることができます。すると、 で、 となります。
2つ目の入出力例では反転操作を行う必要がありません。 となります。
3つ目の入出力例では部分列 を反転させることができます。すると、 で、 となります。
E. Off by One / Сдвиг на один
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
1回の操作で次のような操作を行うことができます。
- 2点 を選ぶ
- 点 を から と のいずれか一方に移動させる
- 点 を から と のいずれか一方に移動させる
- 2点 を削除する
但し、この操作は の新座標、 の新座標、 を通る直線が存在する場合のみ行うことができます。
そうでなければ、この操作は行われず点はそれぞれ元の座標 のままとなります。
幾つかの点が削除された後も点の番号は変わりません。一度削除された点はその後の操作では選択することができません。sl差の際には両方の点を移動させなければならず、元の座標のままにしておくことはできないことに注意して下さい。
最大何回操作を行うことができるでしょうか? どのような操作でしょうか?
答えが複数存在する場合は、そのいずれを出力してもいいです。
入力
1行目には1つの整数 が与えられる、これは点の個数である。
続く 行の 番目には4つの整数 が与えられる。 番目の点の座標は である。
出力
1行目には単一の正位数 を出力せよ、その数とは操作回数の最大値である。
続く 行のそれぞれには1手の動きを記述する2つの整数 を出力せよ、これらはその操作で差k序された点である。 の新座標、 の新座標、 を通る直線が存在するような問題文の条件に従った塡 の移動方法が存在しなければならない。削除された点が後の操作で選ばれることはない。
答えが複数存在する場合は、そのいずれを出力してもよい。操作や操作内の点は任意の順序で出力することができる。
入出力例
7 4 1 5 1 1 1 1 1 3 3 3 3 1 1 4 1 6 1 1 1 5 1 4 1 6 1 1 1
3 1 6 2 4 5 7
4 2 1 1 1 1 1 2 1 2 1 1 2 1 2 1 2
1 1 2
4 182 168 60 96 78 72 45 72 69 21 144 63 148 12 105 6
1 2 4
注記
1つ目の入出力例の点とその移動は次のようになります。
F. Chests and Keys / Сундуки и ключи
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
まず、Aliceは宝箱にいくつかの錠前を附けます。 種類の錠前が存在し、 種類目の錠前は 番目の鍵でしか開けることができません。 個目の宝箱に 種類目の錠前を附けるには ドル支払わなければなりません。Aliveは各宝箱に任意の数の様々な種類の錠前をつけることができます(0であってもよい)。
そして、BobはAliceからいくつかの鍵(0でも全てでもよい)をカイ、開ける音ができる各空箱を開けます(その宝箱についている全ての錠前に対応する鍵を持っている場合開けることができる)。Bobに利益は開けた宝箱の中にあるコインの合計枚数とAliceから鍵を買うのに用いたコインの合計枚数の差です。Bobの利益が厳密に正である(0よりも大きい)場合、彼がこのゲームで勝利します。そうでなければ、Aliceが勝利します。
Aliceは、Bobがどのカギを買っても常にAliceが勝てる(Bobが正の利益を得ることができない)ようにいくつかの宝箱にいくつかの錠前を附けたいです。もりとん、彼女は錠前の購入にかける金額はできるだけ少なうしたいです。彼女がゲームに勝てるかどうか、勝てるなら何ドル用いなければならないかを判別する彼女の手助けをしてください。
入力
1行目には2つの整数 が与えられる、これらはそれぞれ宝箱と錠前の個数である。
2行目には 個の整数 が与えられる、ここで、 は 番目の宝箱に入っているコインの枚数である。
3行目には 個の整数 が与えられる、ここで、 はBobが 番目の鍵をAliceから買うのに必要なコインの枚数である。
そして 行が続く。その 行目には 個の整数 が与えられる、ここで、 はAliceが 番目の宝箱に 種類目の錠前をつつけるのに支払わなければならないドル金額である。
出力
Aliceが勝つことが保証されない(どのように錠前を宝箱に付けても、Bobは必ず正の利益を得ることができる方法が存在する)場合、 を出力せよ。
そうでなければ、1つの整数を出力せよ、その数とはBobの行動に関わらずゲームに勝つためにAliceが支払わなければならない最小のドル金額である。
入出力例
2 3 3 3 1 1 4 10 20 100 20 15 80
205205
2 3 3 3 2 1 4 10 20 100 20 15 80
110
2 3 3 4 1 1 4 10 20 100 20 15 80
-1
注記
1つ目の入出力例では、Aliceは1番目の宝箱に種類 と の錠前を、2番目の宝箱に種類 と の錠前を附けます。
2つ目の入出力例では、Aliceは1番目の宝箱に種類 と の錠前を、2番目の宝箱に種類 の錠前を附けます。
AtCoder Beginner Contest 199のきろく
AtCoder Beginner Contest 199(Sponsored by Panasonic)で3問しか解けませんでした...
- A - Square Inequality (100点)
- B - Intersection (200点)
- C - IPFL (300点)
- D - RGB Coloring 2 (400点)
- E - Permutation (500点)
- F - Graph Smoothing (600点)
- 結果、感想
A - Square Inequality (100点)
いつぞやの誤差を気にする問題のような問題文ですがこちらは元から整数なので素直に と を計算して大小比較すればいいです。
B - Intersection (200点)
整数 が満たす条件は であるので答えは となります。
C - IPFL (300点)
問題文の通りに実装すると のクエリで毎回 となるので となり、間に合いません。前半後半を入れ替えたかどうかというフラグを管理し、 のクエリが来るたびにこのフラグを反転させます。 のクエリで入れ替える文字に注意。
D - RGB Coloring 2 (400点)
各頂点が赤、黄、青の 色なので全て試せば 通り、正しいかどうかを確かめるの込みで で間に合わない...ってやっているうちに時間が来てしまいました...
まず、連結成分ごとに独立で、それぞれの値の積が答えとなります。DFSやBFSを用いて連結成分に属す頂点をvector
に入れていったとき、最初の頂点以外は辺で結ばれた頂点がそれより前に少なくとも1つ存在し、そのためその頂点と同じ色は考えなくともいいため、連結成分の頂点数を とすると高々 通りしか考えなくてもいいことが分かります(最初の頂点は任意の色がいけるが、どれをとっても対称なので1色に固定し3倍すればいい)。そのため全体の計算量が となり、間に合うようになります。
E - Permutation (500点)
という制約から は通らないな、という感じでした。
は通るのでbitDPなどを考えます。 を から までの整数の集合の部分集合とし、
としたとき、 であり、 について が であるような条件を全て満たすときに から に遷移できるため、それに従って遷移させる ことで答え が求まります。F - Graph Smoothing (600点)
期待値問題なので、コンテスト中はあまり考えていませんでした。後で考えてみれば後半3問の中で一番可能性があった...
行列累乗です。 とし、 行列 を考えます。各頂点 の次数を とします。
について頂点 に隣接する頂点が選ばれたとき への自分自身の寄与が半分に減るため となります。
については頂点 と を結ぶ辺が選ばれたとき への の寄与が 増えるため となります。
その他の要素は全て です。
このとき が 回の操作後の頂点の数となるため、 の各要素が答えとなります。
結果、感想
後半が解けず、1時間以上何も提出しない時間を過ごしてしまいました...
AtCoder Regular Contest 117のきろく
AtCoder Regular Contest 117で黄パフォ!!
- A - God Sequence (200点)
- B - ARC Wrecker (400点)
- C - Tricolor Pyramid (600点)
- D - Miracle Tree (600点): 未提出
- E - Zero-Sum Ranges 2 (900点、実行時間制限: 5 sec): 未提出
- F - Gateau (900点、実行時間制限: 3 sec): 未提出
- 結果、感想
A - God Sequence (200点)
のとき とすれば条件を満たします。
のとき とすれば条件を満たします。
のとき正負の役割を入れ換え、 とすれば条件を満たします。
B - ARC Wrecker (400点)
建物を並び替えても状況を変わらず、両者での景観は一対一対応するため、 をソートし、 を追加したものを考えます。
隣り合う建物の高さについて、その差が大きくなることはなく、他の建物とは独立にその間の値を全てとることができます。そのため答えは となります。
C - Tricolor Pyramid (600点)
青、白、赤の色を数 と対応させ、 を 下から 段目の左から 番目のブロックの色に対応する数とします。
このとき 通りのパターンを全て試すことで が成り立つことが分かります。これは二項係数の漸化式によく似た式で、実際の所 となるため、 となり、これを対応する色にすれば答えですが、各 を で求める場合、いつものように逆元を用いる方法では のとき常に となってしまい、WAとなってしまいます。そこで蟻本の262, 263ページに記載されている方法で求めることになります。
D - Miracle Tree (600点): 未提出
直径とか求めるのかな、ACしたら追記します。
E - Zero-Sum Ranges 2 (900点、実行時間制限: 5 sec): 未提出
がかなり小さい...
F - Gateau (900点、実行時間制限: 3 sec): 未提出
苺がいっぱい...
結果、感想
黄パフォで久しぶりのHighest更新!! はやく1800越えしたいなぁ
Educational Codeforces Round 107のきろく
問題文和訳はこちら
- A. Review Site / Сайт отзывов
- B. GCD Length / Длина НОД
- C. Yet Another Card Deck / Очередная задача про колоду карт
- D. Min Cost String / Строка минимальной стоимости
- E. Colorings and Dominoes / Раскраски и домино (実行時間制限: 3 sec): 未提出
- F. Chainword / Чайнворд (実行時間制限: 3 sec): 未提出
- 結果、感想
A. Review Site / Сайт отзывов
タイプ のレビュアーの人数を とします。
タイプ と のレビュアーを第1サーバに、タイプ のレビュアーを第2サーバに送ることで 個の「いいね」を得ることができます。タイプ2のレビュアーが「いいね」を押すことはないのでこれが最大です。
B. GCD Length / Длина НОД
とすると は 桁、 は 桁であり、 であるから、 であり、 は 桁であることから条件を満たします。
C. Yet Another Card Deck / Очередная задача про колоду карт
各色について一番上にあるカードしか考えなくてよく、それを配列などに覚えておく。各クエリ毎に覚えていた値を出力し、また、その値よりも小さなお値のものを全て し、その値を にすることで実装することができます。
D. Min Cost String / Строка минимальной стоимости
連続2文字は 通りあるので 文字目と 文字目のものも含めて 文字で全ての組み合わせを網羅するものを考えます。 の時はa
で の時はabba
です。もっと大きい については漸化式的に文字列を作っていきます。実例として から への遷移で説明します。 のときの文字列のひとつはabcacdadbddccbba
となります。このとき同じ文字が連続しているところのうち一つを選び(ここではdd
)、次のような文字列を挿入します: eaebeceed
。これは(新しく追加される文字+連続の文字以外の文字)の全パターン+新しく追加される文字×2+連続の文字という文字列です。このようにしてベースとなる文字列ができました。この文字列を何度も連結させたものについて先頭の 文字を出力すればよいです。
E. Colorings and Dominoes / Раскраски и домино (実行時間制限: 3 sec): 未提出
さっぱりです。
F. Chainword / Чайнворд (実行時間制限: 3 sec): 未提出
ゲーム系の問題苦手です...
結果、感想
Highest近くにまで恢復できました。D問題が思いついたときは本当にこれで良いんやろうかってなっいた(まぁ、実装バグらせて2WAしているのですが)のでちゃんと通ってよかったです。
Educational Codeforces Round 107 問題文和訳
- A. Review Site / Сайт отзывов
- B. GCD Length / Длина НОД
- C. Yet Another Card Deck / Очередная задача про колоду карт
- D. Min Cost String / Строка минимальной стоимости
- E. Colorings and Dominoes / Раскраски и домино
- F. Chainword / Чайнворд
- G. Chips on a Board / Фишки на доске
A. Review Site / Сайт отзывов
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
しかし、このサイトは内部的にはそれほど単純ではありません。サーバが2台あり、「いいね」と「ひどいね」をそれぞれのサーバが別々にカウントしています。
人のレビュアーが1人ずつサイトを訪れます。各レビュアーは以下のタイプのいずれかです。
- タイプ : レビュアーは映画を見て気に入り、「いいね」ボタンを押す
- タイプ : レビュアーは映画を見て気に入らず、「ひどいね」ボタンを押す
- タイプ : レビュアーは映画を見ないで、自分のいるサーバの「いいね」と「ひどいね」の現在の数を見て、どちらのボタンを押すかを決める。「ひどいね」が「いいね」より多い場合、この映画に対して「ひどいね」を押す。そうでない場合、この映画に対して「いいね」を押す。
各レビュアーは1回のみ映画に対して評価を行います。
サーバが2つあるので、映画にできるだけ多くの「いいね」が付くように投票を操作することができます。レビュアーがサイトを訪れたときその人のタイプが分かるので、第1サーバに送るか第2サーバに送るかを選ぶことができます。
各レビュアーをどちらのサーバに送るかを決めたとき、両方のサーバで集められる「いいね」の合計値の最大値はいくらでしょう?
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
その後、 個のテストケースについての記述が続く。
各テストケースの1行目には単一の整数 が与えられる、これはレビュアーの人数である。
各テストケースの2行目には 個の整数 が与えられる、これらはサイトを訪れる順に並べたレビュアーの種類である。
出力
各テストケースについて、単一の整数を出力せよ、その整数とは各レビュアをどちらのサーバーに送るかを決めたとき、両方のサーバで集められる「いいね」の合計値の最大値である。
入出力例
4 1 2 3 1 2 3 5 1 1 1 1 1 3 3 3 2
0 2 5 2
注記
入出力例の1つ目のテストケースでは、唯一のレビュアをどちらのサーバにも送ることができますが、どちらにしても「ひどいね」を押します。この映画は「いいね」の評価を受けません。
入出力例の2つ目のテストケースでは、レビュアーを全員第1サーバに送ることができます。
- 1人目のレビュアーが「いいね」を押す
- 2人目のレビュアーが「ひどいね」を押す
- 最後のレビュアーが「ひどいね」が「いいね」を上回っていなことを確認し、「いいね」を押す
「いいね」は合計で2つです。別の方法として、1人目のレビュアーと2人目のレビュアーを第1サーバに、最後のレビュアーを第2サーバに送ることもできます。
- 1人目のレビュアーが第1サーバで「いいね」を押す
- 2人目のレビュアーが第1サーバで「ひどいね」を押す
- 最後のレビュアーが第2サーバで「いいね」も「ひどいね」もないことを確認し、「いいね」を押す
B. GCD Length / Длина НОД
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
次の条件を満たす2つの正整数 を求めて下さい。
- 先行ゼロを除いた の十進数表現は 桁である
- 先行ゼロを除いた の十進数表現は 桁である
- 先行ゼロを除いた の十進数表現は 桁である
は整数 と の 最大公約数(greatest common divisor, GCD)*1を表します。
と を出力してください。答えが複数存在する場合、そのいずれかを出力してください。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
続く 行のそれぞれには3つの整数 が与えられる、これらは数字の長さの条件である。
与えられた制約のもとで、全てのテストケースに対して答えが存在することは証明できる。
入力についての追加制約: 全てのテストケースは異なるものである。
出力
各テストケースについて2つの整数を出力せよ、その2つの整数は以下の条件を満たす である。
- 先行ゼロを除いた の十進数表現は 桁である
- 先行ゼロを除いた の十進数表現は 桁である
- 先行ゼロを除いた の十進数表現は 桁である
入出力例
4 2 3 1 2 2 2 6 6 2 1 1 1
11 492 13 26 140133 160776 1 1
注記
入出力例では次の通りになります。
C. Yet Another Card Deck / Очередная задача про колоду карт
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
個のクエリを処理しなければなりません。 番目のクエリは整数 で表されます。各クエリについて次のようなことを行わなければなりません。
- デッキ内で色 である最も上のカード、即ち、最小のインデックスを持つカードを見つける
- 見つけたカードの位置を出力する
- そのカードを取り出し、デッキの一番上に置く
入力
1行目には2つの整数 が与えられる、これらはデッキ内のカードの枚数とクエリの個数である。
2行目には 個の整数 が与えられる、これらはカードの色である。
3行目には 個の整数 が与えられる、これらはクエリの色である。クエリではデッキ内に存在する色のみを尋ねられることは保証される。
出力
個の整数を出力せよ、それらは各クエリに対する答えである。
入出力例
7 5 2 1 1 4 3 3 1 3 2 1 1 4
5 2 3 1 5
注記
入出力例の説明:
- デッキは で、色 である最初のカードの位置は である。
- デッキは で、色 である最初のカードの位置は である。
- デッキは で、色 である最初のカードの位置は である。
- デッキは で、色 である最初のカードの位置は である。
- デッキは で、色 である最初のカードの位置は である。
D. Min Cost String / Строка минимальной стоимости
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
2つの正整数 が与えられます。ラテン文字の最初の 文字のみを含む長さ の全ての文字列の中で、可能な限り最小コストの文字列を求めて下さい。そのような最小コストの文字列が複数存在する場合は、そのいずれかを出力してください。
入力
唯一の行には2つの整数 が与えられる。
出力
文字で構成され、その各文字がラテン文字の最初の 文字のうちの1つであり、これらの文字列の中でコストが最小となるような文字列 を出力せよ。このような文字列が複数ある場合は、そのうちのいずれかを出力せよ。
入出力例
9 4
aabacadbb
5 1
aaaaa
10 26
codeforces
E. Colorings and Dominoes / Раскраски и домино
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
各白セルを赤か青で塗ります。自明ですが、白セルの数を とすると塗り方は 通りあります。
ボード上の白セルを塗ったのち、次のようなルールに従って最大数のドミノを置いていきます。
- 各ドミノは隣接する2つのセルを覆う
- 各セルは高々1枚のドミノで覆われる
- ドミノを横向きに置いた(1行の2つセルを覆う)場合、赤セルのみを覆う
- ドミノを縦向きに置いた(1列の2つセルを覆う)場合、青セルのみを覆う
ボードの値を置くことができるドミノの最大枚数とします。可能な 通りの塗り方全てについての値の合計を計算してください。個の和が巨大になる可能性があるので、modulo で出力してください。
入力
1行目には2つの整数 が与えられる、これらはそれぞれ行と列の数である。
そののち、 行が続き、各行には 文字の文字列が与えられる。 個目の文字列の 文字目は 行目の 番目のセルが黒のとき *
、そうでないときo
である。
出力
1つの整数を出力せよ、その数とは可能な 通りの塗り方についてボードの値の和を で割った余りである。
入出力例
3 4 **oo oo*o **oo
144
3 4 **oo oo** **oo
48
2 2 oo o*
4
1 4 oooo
9
F. Chainword / Чайнворд
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
チェーンワードの文字セルは1列に並べられています。この課題では長さ のチェーンワードを考えます。
チェーンワードのヒントとは、互いに交差せず、 個の文字セルを全てカバーするような、一連のセグメントのことです。各セグメントには、対応するセルにある単語の説明が含まれています。
奇妙なことに実際にはヒントは2つあります: 1つは文字セルの上の行のセグメント列で、もう1つは文字セルの下の行のセグメント列です。列が異なる場合は、答えの曖昧さを解消するのに役立っています。
単語の辞書が当たられます、各語は小文字のラテン文字から成ります。全ての語は互いに相異なります。
チェーンワードのインスタンスは次のような3つ組です。
- 文字の小文字のラテン文字の文字列
- 第1ヒント: 各セグメントに対応する文字が辞書内の単語となるようなセグメント列
- 第2ヒント: 各セグメントに対応する文字が辞書内の単語となるような別のセグメント列
セグメント列は必ずしも異なるものである必要はないことに注意してください。
チェーンワードの2つのインスタンスは、異なる文字列または異なる第1ヒントまたは異なる第2ヒントを持つ場合、異なるものと見做されます。
チェーンワードの異なるインスタンスの数を数えます。この数はかなり大きくなるかもしれないので、modulo で出力してください。
入力
1行目には2つの整数 が与えられる、これらは辞書の単語数と文字セルの数である。
続く 行のそれぞれには単語が与えられる、これらは小文字のラテン文字 文字以内の空でない文字列である。全ての単語は互いに異なる。
出力
1つの整数を出力せよ、与えられた辞書に対する長さ の異なるチェーンワードのインスタンスの数を で割った余りである。
入出力例
3 5 ababa ab a
11
2 4 ab cd
4
5 100 a aa aaa aaaa aaaaa
142528942
注記
ここにあるのは、1つ目の入出力例についての有効なチェーンワードの全てのインスタンスです。
文字の上の赤い線は第1ヒントのセグメントを、文字の下の青い線は第2ヒントのセグメントを示しています。
2つ目の入出力例では、以下の文字列が考えられます: "abab
", "abcd
", "cdab
", "cdcd
"。ヒントは全て、最初の2文字と最後の2文字をカバーするセグメントです。
G. Chips on a Board / Фишки на доске
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
AliceとBobは次のようなゲームをします。2人は である2整数 を選び、列 から列 まで(区間の両端を含む)の部分のみが残るようにボードを切ります。つまり、列 より左にある全ての列と列 より右にある全ての列はもはやボードの一部ではなくなります。
ボードを切った後、ボードの残った部分(列 から列 までの部分)のチップを移動させます。交互に手を打ち、手を打てなかったプレイヤーがゲームに負けます。1手目はAlice、2手目はBob、3手目はAliceというように進行します。手を打つ際、プレイヤーはボード上のチップを1つ選び、任意の正の数のセル分左に移動させなければなりません(つまり、列 にあったチップは列 に移動させることができ、一番左の列にあるチップは選べない)。
AliceとBobは数の組 を 組持っています。そのような各ペアについて、 としたときに、どちらがゲームの勝者になるかを判別したいと思っています。これらのゲームは独立である(次のゲームのボードの状態には影響を与えない)と考えられ、AliceもBobも最適なプレーを行います。
入力
1行目には2つの整数 が与えられる、これらはそれぞれ行と列の数である。
2行目には 個の整数 が与えられる、ここで は 行目のチップのある列のインデックスである(つまり、 行目のチップは 列目にある)。
3行目には1つの整数 が与えられる。
そののち、 行が続き、その 行目には2つの整数 が与えられる。
出力
文字の文字列を出力せよ。 文字目は、 のゲームでAliceが勝った場合はA
、Bobが勝った場合はB
とする。
入出力例
8 10 1 3 3 7 4 2 6 9 7 2 3 1 3 1 4 1 10 5 10 8 10 9 10
BAAAAAB
Codeforces Round #714 (Div. 2) 問題文和訳
- A. Array and Peaks / Массив и пики (500点)
- B. AND Sequences / Последовательности И (1250点)
- Add One / Добавь единицу (1500点)
- D. GCD and MST / НОД и МОД (2000点)
- E. Cost Equilibrium / Ценовой баланс (2750点)
- F. Swapping Problem / Задача об обмене (3500点)
A. Array and Peaks / Массив и пики (500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
2つの整数 が与えられるので、ちょうど 個のピークをもつ から までの数の順列 を構築してください。大きさ の配列 のインデックス は かつ かつ であるとき、ピークといいます。そのような順列が存在しない場合は、 と出力してください。
入力
入力の1行目には単一の整数 が与えられる、これはテストケース数である。
それから 行が続き、そのそれぞれには空白で区切られた2つの整数 が与えられる、これらは配列の長さとピークの数である。
出力
行出力せよ。各テストケースについて、与えられた長さとピークの数を持つ順列がない場合は、 と出力せよ。そうでない場合は、 から までの数の順列を形成し、ちょうど 個のピークを持つような空白で区切られた 個の整数を1行に出力せよ。
答えが複数存在する場合、そのいずれかを出力せよ。
入出力例
5 1 0 5 2 6 6 2 1 6 1
1 2 4 1 5 3 -1 -1 1 3 6 5 4 2
注記
入出力例の2つ目のテストケースでは、配列 となります。ここでインデックス と がピークとなります。これは で、 であるからです。
B. AND Sequences / Последовательности И (1250点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
大きさ の配列 が与えられます。列 がよい配列となるような から までの数の順列 の個数を求めて下さい。この数は大きくなる可能性があるので、modulo で出力してください。
入力
入力の1行目には単一の整数 が与えられる、これはテストケース数である。
各テストケースの1行目には単一の整数 が与えられる、これは配列の大きさである。
各テストケースの2行目には 個の整数 が与えられる、これらは配列の要素である。
全てのテストケースでの の和が を超えないことは保証されている。
出力
行出力せよ、ここで、 行目には 番目のテストケースでの良い順列の個数を で割った余りを出力せよ。
入出力例
4 3 1 1 1 5 1 2 3 4 5 5 0 2 0 3 0 4 1 3 5 1
6 0 36 4
注記
1つ目のテストケースでは、全ての数が同じなので、どのような順列をとっても良い配列になります。 から までの数の順列は次のように合計で 通り存在します: 。
2つ目のテストケースでは、よい配列となるような順列が存在しないことを証明することができます。
3つ目のテストケースでは、よい配列となるような順列が合計で 通り存在しますそのうち1つが順列 であり、このとき列は となります。これがよい配列となるのは以下の通りです。
Add One / Добавь единицу (1500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
1回の操作では、数の各桁 を の十進数表現に置き換えなければなりません。例えば、 は1回の操作を適用させると となります。
回の操作を適応させた後の の長さを求めなければなりません。この数は大きくなる可能性があるので、modulo で出力してください。
入力
入力の1行目には単一の整数 が与えられる、これはテストケース数である。
各テストケースの唯一の行には2つの整数 が与えられる、これらは初期状態の数と操作回数である。
出力
各テストケースについて結果として得られる数の長さを で割った余りを出力せよ。
入出力例
5 1912 1 5 6 999 1 88 2 12 100
5 2 6 4 2115
注記
1つ目のテストケースについて、 は 回の操作の後 となり、その長さは となります。
2つ目のテストケースについて、 は 回の操作の後 となり、その長さは となります。
3つ目のテストケースについて、 は 回の操作の後 となり、その長さは となります。
4つ目のテストケースについて、 は 回の操作の後 となり、その長さは となります。
D. GCD and MST / НОД и МОД (2000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- である場合、 から の間に重さ の辺が存在する
- である場合、 と の間に重さ の辺が存在する
ここで は整数 の最大公約数(greatest common divisor, GCD)*2を表します。
上記の条件の両方を満たす場合、 と の間には多重辺が存在し、何方の条件も満たさない場合、 と の間には辺が存在しないことに注意してください。
目標は、このグラフの最小全域木(minimum spanning tree, MST)*3の重みを求めることです。
入力
入力の1行目には単一の整数 が与えられる、これはテストケース数である。
各テストケースの1行目には2つの整数 が与えられる、これらは頂点数とパラメータ である。
各テストケースの2行目には 個の整数 が与えられる、これらは配列の要素である。
全てのテストケースでの の和が を超えないことは保証されている。
出力
行出力せよ。各テストケースでについて対応するグラフの重さを出力せよ。
入出力例
4 2 5 10 10 2 5 3 3 4 5 5 2 4 9 8 8 5 3 3 6 10 100 9 15
5 3 12 46
注記
ここでは、例題の4つのテストケースのグラフを示しています(グラフの可能なMSTの辺はピンク色で示されています)。
テストケース1について
テストケース2について
テストケース3について
テストケース4について
E. Cost Equilibrium / Ценовой баланс (2750点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
以下の手順で、配列を任意の回数変換することができます。
- 2つのインデックス と整数 を選ぶ。 をソースインデックス、 をシンクインデックスとする
- 番目の要素を だけ減らし、 番目の要素を だけ増やす。 番目と 番目で得られる値はそれぞれ となる
- この操作のコストは である
- ここで、 がシンクインデックス、 がソースインデックスになることはなくなる
変換の総コストはステップ の全てのコストの合計です。
例えば、配列 は総コスト で美しい配列 に変換できます。
美しい配列に変換することができ、その変換のコストが一意に定まる配列をバランス型といいます。言い換えれば、美しい配列に変換するための最小のコストは、最大のコストに等しいものです。
非負整数から成る長さ の配列 が与えられます。貴方の仕事は、与えられた配列の並べ替えであるバランス型の配列の数を求めることです。要素が異なる位置が存在する場合2つの配列は異なる配列とみなされます。答えが大きくなる可能性があるため、modulo で出力して下さい。
入力
1行目には単一の整数 が与えられる、これは配列の大きさである。
2行目には 個の整数 が与えられる。
出力
単一の整数を出力せよ、これはバランス型である並び替えの数を で割った余りである。
入出力例
3 1 2 3
6
4 0 4 0 4
2
5 0 11 12 13 14
120
注記
1つ目の入出力例では、値 のインデックスをソース、値 のインデックスをシンクと考えることができるので、 は有効な並び替えです。したがって、変換後は美しい配列 となり,総コストは となります。これが美しい配列になる唯一の変換であることを示すことができます。同様に他の並び替えについても調べることができます。
2つ目の入出力例では、 と がバランス型である並び替えです。
3つ目の入出力例では、すべての並び替えがバランス型です。
F. Swapping Problem / Задача об обмене (3500点)
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
入力
1行目には単一の整数 が与えられる。
2行目には 個の整数 が与えられる。
3行目には 個の整数 が与えられる。
出力
の最小値を出力せよ。
入出力例
5 5 4 3 2 1 1 2 3 4 5
4
2 1 3 4 2
2
注記
1つ目の入出力例では、配列 の1番目と5番目の要素を入れ替えて にすることができます。
従ってその和の可能な最小値は となります。
2つ目の入出力例では、1番目と2番目の要素を入れ替えることができます。つまり、答えは となります。