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\)

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

posted @ 2019-08-03 16:42  cjoier_Itst  阅读(335)  评论(3编辑  收藏  举报