AtCoder Beginner Contest 121
Updated:
Source codesPermalink
SolutionsPermalink
A - White CellsPermalink
(H−h)(W−w) を出力する。
B - Can you solve this?Permalink
これは地道にやるだけです。
ポイントPermalink
Ruby 使って書いたからそこまで難しくはなかった。
C - Energy Drink CollectorPermalink
貪欲法。 (Ai,Bi) を Ai の昇順に並べ換える。 M 回 Bi の方を減らす。 0 になったら shift
する( Ruby の場合)。
ポイントPermalink
Bi と Ai をごっちゃにして間違いつつあった。
D - XOR WorldPermalink
コンテスト中の解法Permalink
F(x)=0,1,…,x を xor した値、ただし F(−1)=0 とする。
とすると、答えは f(A,B)=F(B)xorF(A−1) である。以下 F(x) を求める。
2 進数表記で考える。 L=x+1 とする。
- 0 桁目について: L%4=2,3 の時は 1 でありそれ以外は 0 である。
- i 桁目 (1≤i≤60) について: L を 2i+1 で割った余りを C とする。 C<2i ならば 0 である。 C≥2i ならば、 C−2i が奇数なら 1 であり、それ以外は 0 である。
模範解答Permalink
次の性質を使う。
任意の偶数 n∈N に対し nxor(x+1)=1 。
すると F(x)=(0xor1)xor(3xor4)xor…xorx={1xor1xor…xor1xorx(x%2=0),1xor1xor…xor1(x%2=1). となる。最初の 1xor…xor1=((x+1)/2)%2 である。これを使うとより簡単に求まる。
ポイントPermalink
そんなに早くは書けなかった。 0 桁目と i 桁目の処理が違うことに気がつくのが遅かった。