zoukankan      html  css  js  c++  java
  • CF933D A Creative Cutout

    Link
    考虑点((x,y))的贡献,设(k=x^2+y^2),那么贡献为:

    [egin{aligned} &sumlimits_{i=k}^nsumlimits_{j=k}^ij\ =&sumlimits_{i=k}^n{i+1choose 2}-{kchoose 2}\ =&{n+2choose 3}-{kchoose 3}-(n-k-1){kchoose 2} end{aligned} ]

    枚举(x),首先可以得到(y)的取值范围。
    同时我们知道(k)是一个关于(y)的二次多项式,因此贡献是关于(y)的六次多项式,再套上一个(sum)就是七次多项式。
    预处理幂和即可(O(1))计算,总时间复杂度为(O(sqrt n))

    #include<cmath>
    #include<cstdio>
    using i64=long long;
    const int N=1000007,P=1000000007;
    i64 n,m,md,a[N],b[N],c[N],ans;
    int main()
    {
        scanf("%lld",&n),m=ceil(sqrt(n)+1e-8)-1,md=n%P;
        for(i64 i=1,t;i<=m;++i) t=i*i%P,a[i]=(a[i-1]+t)%P,b[i]=(b[i-1]+t*t)%P,c[i]=(c[i-1]+t*t%P*t)%P;
        for(i64 i=1,j=m,k;i<=m;++i)
        {
    	for(;i*i+j*j>n;--j);
    	k=i*i%P,ans=(ans+(1+md-k)*(2+md-k)%P*(md+k+k)%P*(j+1)+(4+3*md-12*k%P-6*md*k%P+6*k*k+P+P)%P*a[j]+(6*k-3*md%P-6+P+P)%P*b[j]+2*c[j])%P;
        }
        ans=2*((P+1)/3)*ans%P,ans=(ans+md*(md+1)%P*(md+2)%P*((P+1)/6))%P,printf("%lld",ans);
    }
    
  • 相关阅读:
    第一个爬虫和测试
    数学规律
    自定义手绘
    tqqqy的成绩表
    Linux常用命令-netstat
    文档查看命令 cat more less tail head
    Linux三剑客-常用命令
    IO多路复用模型
    redis 的线程模型
    为什么需要缓存?
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12823870.html
Copyright © 2011-2022 走看看