AtCoder Beginner Contest 121

Updated:

AtCoder Beginner Contest 121

Source codesPermalink

SolutionsPermalink

A - White CellsPermalink

(Hh)(Ww) を出力する。

B - Can you solve this?Permalink

これは地道にやるだけです。

ポイントPermalink

Ruby 使って書いたからそこまで難しくはなかった。

C - Energy Drink CollectorPermalink

貪欲法。 (Ai,Bi)Ai の昇順に並べ換える。 MBi の方を減らす。 0 になったら shift する( Ruby の場合)。

ポイントPermalink

BiAi をごっちゃにして間違いつつあった。

D - XOR WorldPermalink

コンテスト中の解法Permalink

F(x)=0,1,,x を xor した値、ただし F(1)=0 とする。

とすると、答えは f(A,B)=F(B)xorF(A1) である。以下 F(x) を求める。

2 進数表記で考える。 L=x+1 とする。

  • 0 桁目について: L%4=2,3 の時は 1 でありそれ以外は 0 である。
  • i 桁目 (1i60) について: L2i+1 で割った余りを C とする。 C<2i ならば 0 である。 C2i ならば、 C2i が奇数なら 1 であり、それ以外は 0 である。

模範解答Permalink

次の性質を使う。

任意の偶数 nN に対し nxor(x+1)=1

すると F(x)=(0xor1)xor(3xor4)xorxorx={1xor1xorxor1xorx(x%2=0),1xor1xorxor1(x%2=1). となる。最初の 1xorxor1=((x+1)/2)%2 である。これを使うとより簡単に求まる。

ポイントPermalink

そんなに早くは書けなかった。 0 桁目と i 桁目の処理が違うことに気がつくのが遅かった。

OthersPermalink