Exclusive or
某人号 Sam 声称这是找规律题目。
HDU 2014。
给定 n,求:
i=1∑n−1i⊕(n−i)
n≤10500。
注意到这样一件事情:i⊕(n−i)=2(⌊2i⌋⊕⌊2n−i⌋)+[nmod2]。
于是,设 f(n)=i=0∑ni⊕(n−i),那么:
Case #1: n 为偶数
此时设 n=2k,那么考虑 f(k):这个值恰好是对于 i=0∼k,有 i∑i⊕(n−i)=2f(k)。
同理可得后面的部分为 2f(k−1)。
于是 f(n)=2(f(k)+f(k−1))。
Case #2:n 为奇数
同上,此时后面的部分就不是 f(k−1) 而是 f(k) 了,同时我们要补上后面的部分,于是有 f(n)=4f(k)+n+1。
最后记忆化一下,然后写一个高精度即可。