切換
舊版
前往
大廳
主題

ZeroJudge - d188: 11342 - Three-square 解題心得

Not In My Back Yard | 2020-06-26 15:58:40 | 巴幣 0 | 人氣 188

題目連結:


題目大意:
輸入第一列給定一正整數 N (0 < N ≦ 10000),代表有 N 筆測試資料,每筆佔一列。

每列給定一正整數 K (0 < K ≦ 50000),請找到一組 (a, b, c) 滿足 K = a ^ 2 + b ^ 2 + c ^ 2 且 0 ≦ a ≦ b ≦ c 。如果有多組可能的 a 、 b 、 c 則字典順序輸出最小的一組。如果無解,則輸出「-1」。



範例輸入:
3
13
15
17


範例輸出:
0 2 3
-1
0 1 4


解題思維:
因為 0 ≦ a ≦ b ≦ c ,加上 N 最多到 50000 。所以我們可以窮舉所有可能會出現的 (a, b, c) 數組。50000 取平方根略過 223 ,所以我們的 a 值就從 0 跑到 221 、 b 從 a 跑到 222 、 c 從 b 跑到 223 共三層的迴圈。

對於每組 (a, b, c) ,計算 a ^ 2 + b ^ 2 + c ^ 2 的值 V 。如果 V 已經在先前有一組 (a, b, c) 則不須覆蓋,因為題目要字典序較小的,而我們的窮舉方式會從字典序小跑到字典序大的。如果 V 先前沒有一組解,則將現在此組的 (a, b, c) 作為其解。

然後跑完上述過程,沒有被算到過的 V 值,代表沒有任何的解,也就是要輸出「-1」的情況。

接著就是輸入 K 值,就輸出對應的解。

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

創作回應

更多創作