Luogu1945 题解

确实是一枚好题

在此补充一下$ ans1 $的证明过程(搬运自原题解):

可以发现不可能存在格点正三角形,所以只需要计算格点正方形的个数

假设$ r>c $

首先可以发现在边长为\(i\)的格点正方形上,最多有\(i\)个格点正方形。

知道了这一点,我们便可以得出如下公式:

\[ ans1=\sum_{i=1}^{c} i(r-i+1)(c-i+1)\]

这样子其实就已经可以\(O(c)\)计算出\(ans1\)了,但只能拿到70分。所以需要对以上递推式进行化简

化简时要用到平方和、立方和的公式,即:

\[\sum_{i=1}^{n}i^{2}=\frac{n(n+1)(2n+1)}{6} \]

\[\sum_{i=1}^{n}i^{3}=\frac{n^2(n+1)^2}{4} \]

这样\(ans1\)即可化简如下:

\[ ans1=(1+2+...+c)rc-(r+c)\sum_{i=1}^{c-1}i(i+1)+\sum_{i=1}^{c-1}i^{2}(i+1) \]

\[ ans1=\frac{c^{2}(c+1)r}{2}-(\frac{c(c-1)(2c-1)}{6}+\frac{(c-1)c}{2})(r+c)\]

\[ ans1=\frac{c(c+1)(c+2)(2r+1-c)}{12} \]

按照公式,使用高精度算法求出答案即可,程序的时间复杂度即为高精度的时间复杂度。

转载于:https://www.cnblogs.com/WeiPeiRan/p/9567549.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值