AtCoder Beginner Contest #126
A. Changing a Character
小文字にする.解答例
B. YYMM or MMYY
YYが00
のときも駄目だと思ってしまった(西暦の下2桁なので00
があってもよい).2桁ずつ取って,それが1以上12以下であれば月として使える.これを両方について試し,条件分岐すればよい. 解答例
C. Dice and Coin
ABCDEの中で一番困った. 解答例
面サイコロの出目をすべて試す(出目をとする).このとき得点がになる確率を調べたい.のときはサイコロを振った時点でゲームが終了するため,確率は.のときはコインを投げる必要がある.投げる回数をとすると,となる最小のを求めることになる.これはを用いてと変形できるから,.従って確率は.これをについて合計すればよい.
なおループでを求めても間に合ったようだ.これはループ回数が先のであることからとなる.
D. Even Relation
図示するとよい. 解答例
まず奇数長の辺で結ばれた2つの頂点は違う色でなければならない.このとき,その一端からさらに繋がる点について:
- 辺の長さが奇数長:は異なる色にする必要があるが,これは可能である(の距離は偶数長であるからを同じ色にしてよい).
- 辺の長さが偶数長:の距離は奇数長になるからは異なる色である必要がある.とがそれぞれ異なる色同士であるから,は同じ色.
よって奇数長の辺の一つの端点を選び,そこから繋がる点について再帰的に「辺の長さが奇数長であれば前の頂点と異なる色,偶数長であれば同じ色を塗る」処理を行えばよい.すべての辺が偶数長の場合はどのように頂点を塗ってもよいため適当に頂点を選べばよい.さらにすべてが偶数長でなくとも適当に頂点を選んでよい(奇数長の辺に遭遇するまですべて同じ色で塗ることになるが,その結果は奇数長の辺から始めた場合と同一であるから).
なお辺が偶数長であるときは本来両端に異なる色を塗ってもよいのだが,奇数長の辺が存在する場合失敗することがある.例えば辺の長さが,の長さがのとき,に異なる色を塗るとの色が等しくなるが,距離はと奇数.
E. 1 or 2
まずが偶数であることから,の偶奇が分かる.ここでがすべてかであることに注意すると,の値が分かればの値も偶奇性から分かる(!).これは連鎖する:との偶奇が分かっているとき,の値が分かればの値が分かり,さらにの値が分かる.
従ってこの関係を図示する,すなわち辺が各であるようなグラフを描けば,各連結成分について1つ値が分かりさえすれば残りの要素もすべて分かることになる.したがって連結成分の数が答えとなる.これはUnionFind(またはDFSなど)で調べられる.
F. XOR Matching
抽象的に区間の共通部分をうまく使う方法を考えていたが浮かばず.解説放送でも触れられていたが構築問題なので実験してみるべきだった. 解答例
解けなかった構築問題の記事をどう書けばいいかは難しいところだが,結論から言うとのときに次のような形を作るとほとんどの場合でうまくいく(ただしにはは含まれない):
こうすると以外の整数同士が作る区間の共通部分をそのまま使い回せて(同士のxorはとなるためxorが内側と等しくなる),その値は中央のとなる.が作る区間についてはとなるが,このxorも実はほとんどの場合でとなる:
の値がまでであることに注目すると,この区間は
となり,xorはとなる(順序を入れ替えることではを含む).これはABC121-D: XOR Worldでも出題されたように隣り合う偶数と奇数のxorがになることを利用すればとなる.このの個数はであり:
- のとき:
- の個数がバグるのでこの構築法は使えない.
- 実際に試すとしかない.よってのみが存在.
- のとき:
- は個.よってxorはとなる.これがと等しいような数は存在しない(の両側にを適用すれば).すなわちこの構築法は使えない.
- 一方で,入出力例にもあるようにでも解を持つことがある.全探索で求めればよい.パターンは通り,対称性を考慮すれば
0011
,0101
,0110
,1001
のつであり,ここからのときは複数の解が存在する一方で,のときは存在しないことが明らかになる.
- のとき:
- は個であるが,これは偶数.従ってxorは .
- ゆえに確かに同士の区間のxorもとなるから,この構築法が使える.
最後にの場合:このときは先の構築はできないが,からまでの数を適当に選んでxorで作れる値の最大値はである(に相当するビットが立っている数が存在しないため,いかなるxorの結果もこのビットを持たない,すなわち以上にならない)から弾いてしまって問題ない.
結論:
- のとき
- またはのとき: 実際に試すとしかない
- のとき: 構築法を用いると作れる
- のとき: 作れない