1, A Creative Cutout CodeForces - 933D
大意:给定$n$个圆, 圆心均在原点, 第$k$个圆半径为$\sqrt{k}$
定义一个点的美丽值为所有包含这个点的圆的编号和
定义函数$f(n)$为只有$n$个圆时所有点的贡献,求$\sum_{k=1}^{n}{f(k)}$
首先注意到每个圆上的点对答案的贡献是相同的
可以得到圆$x^2+y^2=c$上单个点的贡献
$$g(c)=\sum _{i=c}^n \sum _{j=c}^i j=\binom{n-c+2}{3}+c\binom{n-c+2}{2}$$
最后考虑如何计算答案, 如果枚举每个圆的话发现圆上整点数并不是很好算
但是可以注意到$x,y$的范围都是在$\sqrt{n}$范围内的,
对于固定的$x$,贡献为$h(x)=\sum\limits_{y^2\le n-x^2}g(x^2+y^2)$
因为$g(x^2+y^2)$是$y$的一个6次多项式
$h(x)$可以预处理$\sum{y},\sum{y^2},...,\sum{y^6}$后$O(1)$计算
当然手推出系数的话可以省去预处理, 这里就得到$O(\sqrt{n})$的算法了
原文地址:https://www.cnblogs.com/uid001/p/10331316.html
时间: 2024-11-11 01:48:31