JZOJ 6944. 【2020.01.07冬令营模拟】球(qiu )


首先我们看一下良心的数据范围

1分2分3分4分5分85分!!!!你认真???
对于怎么大的数据我们肯定是要找规律的。
我们采用容斥算法:求ans=pd(x1,y1)-pd(x1,y-1)+pd(x-1,y-1)-pd(x-1,y1);pd(表示原点到该点的权值和);
对于一个pd()首先把问题分成两部分
一部分是形如这样(x,x+1)的“正方形”

另一部分是超过“正方形”的部分:
我们只需要将两部分的权值加起来就行了。
对于第一部分:我们可以知道每一圈的和为(2n-1)^2 x (n x 2)+n (为平方数的数值乘一圈的个数(就平均数*个数)+最右下角的差值)如图

把公式化简就为 (2n-1)^3 + (2n-1)^2 +n;
所以正方形的和为:∑i=1~n (2i-1)^3 + (2i-1)^2 +i通俗来讲就是1^3 + 3^3 + 5^3+ …… + n^3 + 1^2 + 3^2 + 5^2+ …… + n^2 + 1+2+3+……+(n+1)/2 第一个的公式为:num^2 (2(num^2)-1)
第二个公式为:(num(2num-1)(2num+1))/3 第三个公式 首项加末项…… num表示圈数。这样就可以愉快的求出“正方形”了;
第二部分也很简单:去掉“正方形”后我们会发现剩下的部分是有规律的,如图

最后是一些细节:1.这里的模数很大是2^63,我们要开unsigned long long,然后直接自然溢出就行了,因为unsigned long long的范围是2^64,是模数的两倍。


感谢观看
(由于我不知道为什么代码放上去就乱了 所以。。。)

posted @ 2021-01-10 20:06  *LZX*  阅读(96)  评论(0编辑  收藏  举报