Kickstart Round A 2017

Problem A. Square Counting

Description

Mr. Panda has just been given a grid with R rows and C columns of dots. How many different squares can he find in this grid? Since the number might be very large, please output the answer modulo 109 + 7 (1000000007).

Algorithm

比賽開始時取了個外賣,然後推公式推了很久。對於十二三分鐘就做出來這題的人我只能表示佩服。

首先計算 R == C 的情況。

  • 邊長爲1的小正方形有 (C-1) * (C-1) 個,每一個的內部邊上的斜正方形有 0 個;
  • 邊長爲2的小正方形有(C-2) * (C-2)個,每一個的內部邊上的斜正方形有 1 個;
  • 邊長爲(C-1)的小正方形有 1 * 1 個,每一個的內部邊上的斜正方形有 (C-2) 個.


k=1C1(Ck)2(1+k1)=k=1C1k2(Ck)

整理之後用平方和公式和立方和公式可以得到
f(C,C)=C2(C21)12

然後不妨假設 R > C, 則對於多出來的每一行,需要加上的正方形有:

  • 邊長爲1的:(C-1) 個,每一個裏面斜的正方形有 0 個,
  • 邊長爲2的: (C-2) 個,每一個裏面斜的正方形有 1 個,
  • 邊長爲 (C-1) 的: 1 個,每一個裏面斜的正方形有 (C-2) 個.

即需要加上

k=1C1(Ck)+(Ck)(k1)=k=1C1k(Ck)

整理一下,然後乘以 (R-C) 之後加到 f(C,C) 上就是 f(R, C) 了。
答案需要模 109+7 ,large的數據需要小心精度。我錯了。結束之後發現了,改了又改還是不對,懷疑需要高精度?最後想起來python,直接寫了公式求,是對的。

最後

我太弱了,3 hour 只做出來這一題的small數據。
第二題正則匹配沒寫好。
其他題再說吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章