码迷,mamicode.com
首页 > 其他好文 > 详细

组合计数训练

时间:2019-01-28 21:14:02      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:计数   范围   ups   答案   bsp   一个   训练   nbsp   圆心   

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

 

组合计数训练

标签:计数   范围   ups   答案   bsp   一个   训练   nbsp   圆心   

原文地址:https://www.cnblogs.com/uid001/p/10331316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!