noip2015广东 普及组coin

来源:互联网 发布:淘宝宝贝下载破解版 编辑:程序博客网 时间:2024/05/01 06:29
水题,数学

题意:
一个数列,第一项是1,接着的两项都是2,再接着的三项都是3...问前n项和

数据范围:
n<=10000

思路:

n这么小,直接打表递推就行了。虽然是两行for循环,总的循环次数是n次的,O(n)复杂度。其实可以O(1)求答案。

前n项和是这样的,1个1+2个2+3个3+...+k个k+剩余的k+1,去除最后一项外,前面的和就是1^2+2^2+..k^2而已,二阶等差数列的和是k*(k+1)*(2k+1)/6。

然后这里有k*(k+1)/2项,剩余的项数就是n-k*(k+1)/2,所以刚才的和+剩余项数*(k+1)就是答案

如何求k?这里k的定义是,满足k*(k+1)/2<=n的最大整数,所以k是sqrt(2n)附近的整数,无需二分

总结:递推,或者推公式


0 0
原创粉丝点击