EllysXorstopcoder練習会に参加して、easyを100点くらいで通した。4*10^9解法XORの性質より、二進表記でi桁目が1になるかどうかは、LからRの間の数で、i桁目が1となる数の個数の偶奇で決まる(偶数個の場合0で奇数個の場合1)。よって、各桁について、1が立っている数の個数が計算できればよい。ここで、1からNまでで各桁について合計何個1が立っているかを考える。このとき、2^i-1となる数は、各桁で1が立っている数の個数はそれぞれ2^(i-1)個であることを考えると、2^i+jは最上位桁は1がj+1個で、それ以外の桁は、2^i-1の個数とjの個数の和となることがわかる。よって再帰的に個数を計算できる。1からNまで求められれば、1からRまでを求め、1からL-1のときを引いて、各桁の1の個数の偶奇から答えを求めればよい。R)コード別解法4n^(4n+1)^(4n+2)^(4n+3)=0を利用する(4nが、nを2ビット左シフトした数だということを考えればわかる)。f(N)=1^2^...^Nとすると、上式より、N=4k+mとすると、m=0のときf(N)=(1^2^3)^(4^5^6^7)^...^4k=0^0^..^4k=4k=Nm=1のときf(N)=4k^(4k+1)=1m=2のときf(N)=4k^(4k+1)^(4k+2)=4k+3=N+1m=3のときf(N)=4k^(4k+1)^(4k+2)^(4k+3)=0となり、あとはR^(R+1)^...^L=f(L)^f(R-1)を利用して求めればよい。(1)はてなブログをはじめよう!n_knuuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。