[代码]BZOJ 2831 小强的金字塔

Abstract

BZOJ 2831 小强的金字塔

数学题

Source

http://www.lydsy.com/JudgeOnline/problem.php?id=2831

Solution

http://wjmzbmr.com/archives/xiaoqiang_pyramid/

一开始sb,写了三个函数,复杂度直接爆……后来问clj被告知他只写了一个函数……

写成一个函数或者搞三个然后记忆化都可以过。

我果然是sb……

Code

/**************************************************************
    Problem: 2831
    User: ToumaKazusa
    Language: Python
    Result: Accepted
    Time:84 ms
    Memory:6616 kb
****************************************************************/
 
sum = lambda n:n*(n+1)/2
sqrsum=lambda n:n*(n+1)*(2*n+1)/6
 
#[x*((ax+b)/c), (ax+b)/c, ((ax+b)/c)^2]
def f(a, b, c, r):
    if r < 0:
        return [0]*3
 
    if a >= c:
        t = f(a%c, b, c, r)
        a /= c
        return [t[0]+a*sqrsum(r), t[1]+a*sum(r), t[2]+a*a*sqrsum(r)+2*a*t[0]]
    elif b >= c:
        t = f(a, b%c, c, r)
        b /= c
        return [t[0]+b*sum(r), t[1]+b*(r+1), t[2]+b*b*(r+1)+2*b*t[1]]
    else:
        if a == 0:
            return [0]*3
        y = (a*r+b)/c
        t = f(c, c-b-1, a, y-1)
        res = [y*sum(r)-(t[1]+t[2])/2, y*r-t[1], y*y*r-2*t[0]-t[1]]
        return res
 
a, c, b, l, r = map(int, raw_input().split())
print f(a, b, c, r)[0]-f(a, b, c, l-1)[0]

 

posted @ 2013-05-07 10:29  杂鱼  阅读(534)  评论(0编辑  收藏  举报