组合计数训练
Posted uid001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合计数训练相关的知识,希望对你有一定的参考价值。
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=inom{n-c+2}{3}+cinom{n-c+2}{2}$$
最后考虑如何计算答案, 如果枚举每个圆的话发现圆上整点数并不是很好算
但是可以注意到$x,y$的范围都是在$sqrt{n}$范围内的,
对于固定的$x$,贡献为$h(x)=sumlimits_{y^2le 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})$的算法了
以上是关于组合计数训练的主要内容,如果未能解决你的问题,请参考以下文章