切換
舊版
前往
大廳
主題

ZeroJudge - d880: NOI2010 Day1.1.能量採集 解題心得

Not In My Back Yard | 2019-07-08 23:51:02 | 巴幣 0 | 人氣 183

題目連結:


題目大意:
給定兩正整數 n 、 m (1 ≦ n 、 m  ≦ 100, 000),代表有 n × m 棵植物種在標準座標平面上(1, 1)~(n, m)的格子點。

現在將這些植物從所在的座標位置連到(0, 0)。如果連線的中途(以下稱此線為 L )沒有碰到其他植物,則完整地蒐集能量。如果直線 L 在路上碰到了其他 k 棵,則總共會損失掉 2k + 1 的能量。

求總共會損失掉多少能量。



範例輸入:
【範例輸入1】
5 4
【範例輸入2】
3 4


範例輸出:
【範例輸出1】
36
【範例輸出2】
20


解題思維:
稍微觀察一下,可以看出這題其實就是在變相求最大公因數的和。

但是用雙層迴圈硬 A 會超時,需要更快的公式,如下:
其中 φ(i) 代表歐拉函數(見維基)。

但是因為我們要統計的是有多少棵樹(此數量為 k )擋住其他樹而消耗的能量值,從上式我們可以知道 k 的數目(但是有多算,要扣掉)。因此我們的答案應為:
2k - m × n

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作