组合计数训练

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})$的算法了

 

以上是关于组合计数训练的主要内容,如果未能解决你的问题,请参考以下文章

算法训练 JAM计数法 生成组合+模拟

如何有效地使用 CountVectorizer 来组合目录中所有文件的 ngram 计数?

《训练指南》——6.6

组合数学 05 - 经典计数方法

组合数学笔记-计数原理

bzoj 2425 [HAOI2010]计数 dp+组合计数