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})次内找到满足(mod a=0)(l,r),也就是每一次从([l,r])变为([l+1,r+1])(l < 10^{18}),所以这样是一定可以构造出方案的。

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

(egin{align*} sumlimits_{i=0}^{10^{18}-1} f(i) & = 45 imes 10^{17} + 10 imes sumlimits_{i=0}^{10^{17}-1} f(i) \ & = 45 imes 10^{17} + 450 imes 10^{16} + 100 imes sumlimits_{i=0}^{10^{16}-1} f(i) \ &= ... \ &= 45 imes 18 imes 10^{17} \ &= 8.1 imes 10^{19} end{align*})

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

注意上面保证了(l eq 0)

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

原文地址:https://www.cnblogs.com/Itst/p/11295346.html