ABC172 参加メモ
勤勉ではありません(悲痛)
ABCD4完 520th Perf=1795 (1916->1904(-12))
冷えが青程度に収まってるから良いものの、上限を上げる努力をしましょう
A - Calc
気をつけて書く a + a*a + a*a*aB - Minor Change
こういうのってfor使わない方法とかあったっけcnt += S[i] != T[i]
C - Tsundoku
机Aを読む数 を決めたら机Bをできるだけ読もうとしてできる読む数 が決まるので尺取りっぽくやって で処理可能D - Sum of Divisors
の倍数についてカウントするだけでも で通るけどちょっと怖いっぽい。 解がある。の倍数を とすると、 で答えが出てくる。
は の和になっているので等差級数の和である。つまりこれは で計算できて、 となる。
最終的な答えは となり、 である。
通りそうなら通しちゃうのもコンテストの中では大事だとは思うけどこういうのもちゃんとやらないと
E - NEQ
事象 を であることとする。すると今回の というのは ということになる。
これはド・モルガンで となっていて、どうやら事象の和事象の形になるようである。
事象 を の条件にしたのも、こっちのほうが求めやすいわけで、事象の和事象を包除原理を用いて積事象たちを使って解こうという魂胆である。
今回の事象を包除原理で表すと以下の形になる。
( は全体集合, は 事象 の起こりうる数)
ここで出てくる積事象たちについて、この問題ではどのように表すかを考える。
各要素が 以上 以下の整数である、ある集合 がある。 (例えば だったら とか)
このときの である について である。
このようなものの個数は数え上げできて、 個となる。
これが 要素である。
足し上げる時には上記の包除原理の式に則ると の要素数が偶数の時には +, 奇数の時には - になっている必要があるので、 この要素の項は ということになる。
これを全ての について数えると。すると、次のような式になる。
しかしこれだと 回計算してしまうのでそのままだと計算できない。
考えてみると、各項で使っているのは だけであるので、要素数が一致していれば全て同じ答えを出すということが分かる。 では要素数が であるような の数というのは 個だけあるので、各要素数についてまとめて計算できる。
すると、式は、
となって、無事に数え上げることが出来た。
積事象を考えるときには余事象についての部分的な積事象が高速に求まらないかを考えていく必要がありそう
F - Unfair Nim
解説のpdfとほぼ一緒かも…これは通常のNimなので、この問題で高橋くんが勝つというのは であることを言う。
操作に置いて 以降は値は変わらないので一つにまとめてしまってもよい。 と置いておく。
とおくと、 であるような で、 つまり であるような最大の を見つければこの問題が解ける。
まとめると条件は つになる。
ここで であることを利用すると、
より、 となる。
すると、 が奇数の場合や負になっている場合は答えが無しになる。
新たに と置くとする。
すると、次のような条件になる。
これによってビットごとに独立の計算になったことが良い性質である。ここで色々なことが分かる。
との兼ね合いを考えると、 の同じビットが同時に になっていることはありえない。そのため、 である場合も答えは無しである。
ここで具体的に解いていく。
まず のbitで が立っているところは のどちらも が立っていないといけないので予め立てておく。
そうしたら の bitで が立っているところが気になる。 このとき、 のどちらかに を立てるということをする。
このとき、 ギリギリのところまで bit を立てれば最大化出来そう。
そのため、上のビットから貪欲に が立てられるまで立てると、 を 最大化させられる。
ここで最大化した結果として になるのならば、-1を出力する。
これをすると、 は条件を満たしている。 移動した回数は で出てくるのでそれを出力して終わり。
bitの計算になったら、足し算はすぐに xor と and に翻訳しないといけないと感じた。