CF468C Hack It! 构造

传送门


让人觉得脑子不够用的构造

考虑对于一个区间\([l,r]\)如何让它调整使得最后的结果恰好加上\(1\)。

注意到对于一个\(<10^{18}\)的数\(x\),\(f(x+10^{18}) = f(x)+1\),所以如果\(r-l = 10^{18} - 1\)且\(l < 10^{18}\),那么将区间\([l,r]\)变为区间\([l+1,r+1]\)之后,答案恰好增加\(1\)。

而\(a \leq 10^{18}\),所以我们初始取\(l=0,r=10^{18}-1\),之后不断将区间\([l,r]\)变为区间\([l+1,r+1]\),一定可以在不超过\(10^{18}\)次内找到满足\(\bmod\ a=0\)的\(l,r\),也就是每一次从\([l,r]\)变为\([l+1,r+1]\)时\(l < 10^{18}\),所以这样是一定可以构造出方案的。

那么我们最后需要做的事情就是求\(\sum\limits_{i=0}^{10^{18}-1}f(i)\)的值了。

\(\begin{align*} \sum\limits_{i=0}^{10^{18}-1} f(i) & = 45 \times 10^{17} + 10 \times \sum\limits_{i=0}^{10^{17}-1} f(i) \\ & = 45 \times 10^{17} + 450 \times 10^{16} + 100 \times \sum\limits_{i=0}^{10^{16}-1} f(i) \\ &= ... \\ &= 45 \times 18 \times 10^{17} \\ &= 8.1 \times 10^{19} \end{align*}\)

那么我们令\(l = a - (8.1 \times 10^{19} \mod a) , r = l + 10^{18}-1\),就是一组合法的解。

注意上面保证了\(l \neq 0\)

都说到这里了你难道不会写代码吗?

上一篇:bugku 网站被黑(后台目录,爆破)


下一篇:Hack 语言学习/参考---1.1 What is Hack?