買M送N檔期的等價折扣統計
Counting Equivalent Buy-and-Get-Free Deals・pync-21-01
- Python 程式設計・21 Inheritance & More OOP
時間限制 1 秒・記憶體 31 MB
送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。
題目敘述
賣場一季推出許多「買 buy 送 free」的檔期,其中有些其實是同一個折扣。例如買 3 送 1 與買 6 送 2,你實際付費的都是拿到商品數量的四分之三。行銷部門想知道這一季到底有幾種不同的折扣,以及每一種各出現了幾次。
兩個檔期視為同一個折扣,當且僅當實付比例相同,也就是 buy / (buy + free) 相等。因此買 4 送 2 與買 2 送 1 是同一個折扣,但買 4 送 2 與買 2 送 2 不是(比較的是比例,不是兩數之差)。請用整數交叉相乘來比較:buy1 * (buy2 + free2) 是否等於 buy2 * (buy1 + free1)。像 1/3 這種比例無法用小數精確表示,直接相除比較可能讓本該相等的折扣變成不相等。
每一種不同的折扣只報告一次,使用它第一次出現時的 buy 與 free,並附上這一季中屬於這個折扣的檔期總數。
輸入格式
第一行是整數 N,代表這一季的檔期數。接下來 N 行,每行有兩個整數:買幾件與送幾件。買的數量至少為 1,送的數量可能是 0。
輸出格式
每一種不同的折扣輸出一行,依第一次出現的順序,格式為 <buy> <free> <檔期總數>,其中 buy 與 free 取自它第一次出現的檔期。 最後輸出一行 Distinct <不同折扣的種類數>。
範例
範例 1
輸入
6
3 1
6 2
2 2
1 0
9 3
4 4輸出
3 1 3
2 2 2
1 0 1
Distinct 3送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。
卡住了可以到 Discord 的 #程式問題 發問,小墨助教會先給提示,不會直接給答案。