zoukankan      html  css  js  c++  java
  • codeforces 933D A Creative Cutout

    题目链接

    正解:组合数学。

    充满套路与细节的一道题。。

    首先我们显然要考虑每个点的贡献(我就不信你能把$f$给筛出来

    那么对于一个点$(x,y)$,我们设$L=x^{2}+y^{2}$,那么它的贡献就是$ans=sum_{k=L}^{n}sum_{j=L}^{k}j$

    然后我们把后面那个$sum$化成组合数的形式,即$ans=sum_{k=L}^{n}inom{k+1}{2}-inom{L}{2}$(讲真连这一步我都没想到

    注意一个等式$sum_{i=L}^{R}inom{i}{x}=inom{R+1}{x+1}-inom{L}{x+1}$,这个直接用杨辉三角的递推式即可证明。

    把这个等式带进去,可得$ans=inom{n+2}{3}-inom{L+1}{3}-(n-L+1)inom{L}{2}$

    然后暴力拆开,可得$ans=frac{1}{6}(n(n+1)(n+2)-L(L-1)(L+1)-3(n-L+1)(L-1)L)$

    然后把$L=x^{2}+y^{2}$代入,可得$6ans=n(n+1)(n+2)+2x^{6}+6x^{4}y^{2}+6x^{2}y^{4}+2y^{6}-3(n+2)(x^{4}+2x^{2}y^{2}+y^{4})+(3n+4)(x^{2}+y^{2})$

    枚举$x$,那么$y$的取值范围是一个区间。所以我们预处理出二次,三次和六次的幂和,直接算即可,复杂度$O(sqrt{n})$。

     1 #include <bits/stdc++.h>
     2 #define il inline
     3 #define RG register
     4 #define ll long long
     5 #define N (1000005)
     6 #define rhl (1000000007)
     7 
     8 using namespace std;
     9 
    10 ll sum2[N],sum4[N],sum6[N],n,m,lim,ans;
    11 
    12 il ll qpow(RG ll a,RG ll b){
    13   RG ll ans=1;
    14   while (b){
    15     if (b&1) ans=ans*a%rhl;
    16     if (b>>=1) a=a*a%rhl;
    17   }
    18   return ans;
    19 }
    20 
    21 int main(){
    22 #ifndef ONLINE_JUDGE
    23   freopen("cutout.in","r",stdin);
    24   freopen("cutout.out","w",stdout);
    25 #endif
    26   cin>>n,m=n%rhl,lim=sqrt(n);
    27   for (RG ll i=1;i<=lim;++i){
    28     sum2[i]=(sum2[i-1]+i*i)%rhl;
    29     sum4[i]=(sum4[i-1]+qpow(i,4))%rhl;
    30     sum6[i]=(sum6[i-1]+qpow(i,6))%rhl;
    31   }
    32   for (RG ll x=-lim,y,x2,x4,x6,res;x<=lim;++x){
    33     y=sqrt(n-x*x),x2=qpow(x,2),x4=qpow(x,4),x6=qpow(x,6),res=0;
    34     (res+=m*(m+1)%rhl*(m+2)+2*x6-3*(m+2)*x4+(3*m+4)*x2)%=rhl;
    35     (ans+=12*x4%rhl*sum2[y]+12*x2%rhl*sum4[y]+4*sum6[y])%=rhl;
    36     (ans-=12*(m+2)%rhl*x2%rhl*sum2[y])%=rhl;
    37     (ans-=6*(m+2)%rhl*sum4[y])%=rhl;
    38     (ans+=2*(3*m+4)*sum2[y]+res*(2*y+1))%=rhl;
    39   }
    40   cout<<(ans+rhl)*((rhl+1)/2)%rhl*((rhl+1)/3)%rhl; return 0;
    41 }
  • 相关阅读:
    SQL Server中事务transaction如果没写在try catch中,就算中间语句报错还是会提交
    EF Core中Key属性相同的实体只能被跟踪(track)一次
    Android--数据持久化之内部存储、Sdcard存储
    SQLite的介绍 操作Sqlite 具体实例
    Android提供了5种方式存储数据:
    Eclipse集成Tomcat的配置步骤实例
    如何实现上下左右键盘控制焦点使之落在相邻文本框或下拉框中-Web开发/JavaScript
    android布局
    android布局 及 布局属性
    Android开发之SD卡上文件操作
  • 原文地址:https://www.cnblogs.com/wfj2048/p/8721454.html
Copyright © 2011-2022 走看看