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

Luogu1945 题解

时间:2018-08-31 21:14:39      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:立方和   一点   算法   好题   答案   需要   假设   rac   使用   

确实是一枚好题

首先膜一下 @cyn2006 的bignum实现和不同分值的做法

在此补充一下$ 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} $$

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

Luogu1945 题解

标签:立方和   一点   算法   好题   答案   需要   假设   rac   使用   

原文地址:https://www.cnblogs.com/WeiPeiRan/p/9567549.html

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