f776: 方形數字
原點在左下角。
x 方向左而右由 1 ~ N, y 方向下而上由 1 ~ N 的一個方形數字。
請算出每組 (x1, y1)to(x2, y2)的數字合計。
3 | 3 | 3 |
2 | 2 | 3 |
1 | 2 | 3 |
v0
一開始就想肯定有公式解
朝著F([x1,y1],[x2,y2])
去思考
後來發現有點難
v1
後來想到F(x,y)去return當下格子數字 但這樣O()會超級大 exF(7,5) => F(3,2) O(20)
v2
後來的想法是F(n) 去算 NxN內的數字和
F(1) = 1
F(2) = F(1) + 2 * (2 * 2 - 1)
F(3) = F(1) + F(2) + 3 * (3*2 -1)
F(n) = F(n-1) + n*(2*n-1)
= + 2n^2 - n
再從 F(1),F(n),F(n+1)去推 F(n)公式解 發現可以拆成
F(n) = 2n^2 - n
= S(2n^2) - S(n)
= 2(n(n+1)(2n+1)/6) - (n+1)n/2
至此 F(n) 求出來了
之後再推導出F(x,y) 就可以更快了
F(X,Y)
F(x,y) = F(Y) + 6 * 5 + 7 * 5
= + (X-Y)XY - (Y(Y+1)(2Y+1)/6)