codechef Counting Spaghetti 数学

(2 mins to read)

现在有$L, L+1,…R-1,R$这R-L+1个数字,问你能够组成多少种不同的数字和$L \leq 10^9, R \leq 10^9$

考虑用x个数字来组合1个数字:$[L, R]$内的所有数字

2个数字:$[L+L+1, R+R-1]$内的所有数字

3个数字:$[L+L+1+L+2, R+R-1-R-2]$内的所有数字

则对于x个数字有:$l_x = \frac{x(2L+x-1)}{2}$, $r_x = \frac{x(2R-x+1)}{2}$

因此只要求用1$\sim$R-L+1个数字构成的各个区间的并集的长度即可考虑$l_x>r_{x-1}$则要满足$x^2 + (L-R-2)x + R + 1 > 0$当$(R-L+2)^2 - 4R - 4<0$时,所有区间都不相交,又发现此时R-L+1在$O(\sqrt R​$)级别,所以暴力求出各个区间的长度相加即可否则,求出两个根x1,x2,则在$[x1,x2]$这一段区间都是相交的,区间并的左端点为x1的左端点,右端点x2的右端点。考虑$\frac{R-L+2 \pm \sqrt{(R-L+2)^2-4R-4}}{2}$设R-L+2为a,4R-4为b,且满足$a \geq \sqrt b$$a-\sqrt{a^2-b} = a-\sqrt{(a+\sqrt b)(a - \sqrt b)} \leq a - \sqrt{(a-\sqrt b)^2} = \sqrt b$所以1$\sim$x1的长度在$O(\sqrt b)$级别,而x2$\sim$a的长度为$a-\frac{R-L+2 + \sqrt{(R-L+2)^2-4R-4}}{2} = \frac{R-L+2 - \sqrt{(R-L+2)^2-4R-4}}{2}$​,也在$O(\sqrt b)$级别,所以只需要对两端不相交的部分暴力即可