題目敘述
學校合作社蒐集了 N 筆悠遊卡交易代碼,每筆代碼都是長度恰好 15 的數字字串。為了在系統間交換資料,交易碼依序包含:
AAABBBCCCCDDDRX
AAA(第 1~3 位):店家編號。BBB(第 4~6 位):商品分類。CCCC(第 7~10 位):交易流水號。DDD(第 11~13 位):金額代碼。R(第 14 位):系統保留碼。X(第 15 位):檢查碼。
編號及代碼都可能含有前導零,例如店家 065 輸出時不能寫成 65。流水號及保留碼用來區分交易紀錄,不影響交易種類;但保留碼仍參與合法性驗證。
第一階段:驗證。 從字串索引 0 開始,只對前 14 位計算:偶數索引的數字總和為 A,奇數索引的數字總和為 B。令 S = A + 3 × B,若 (S + X) % 10 == 0 則交易合法,否則整筆忽略。
第二階段:計算每間店家的異常值。 只看合法交易,依照「店家編號 AAA、商品分類 BBB、金額代碼 DDD」分組。同一組的交易算同一種;流水號 CCCC 或保留碼 R 不同,仍算同一種。只要 BBB 或 DDD 有一個不同,就要分到另一組。
算出各組有幾筆後,取該店家筆數最多的那一組,這一組的筆數就是該店家的「異常值」。不是把這間店家的所有交易筆數加起來,也不是計算有幾種交易。
例如店家 007 的合法交易分成三組,筆數分別是 4、2、1,那麼店家 007 的異常值是 4,不是總交易筆數 7,也不是交易種類數 3。
第三階段:選出店家。 在至少有一筆合法交易的店家中,取異常值最高者;若並列,取三位店家編號數值較小者。若全部交易均不合法,輸出 invalid。
輸入格式
第一行為整數 N。接下來 N 行,各有一筆長度為 15 的交易代碼,只含數字。
限制
- 1 ≤ N ≤ 10000
- 店家編號、分類、金額代碼等皆允許前導零
輸出格式
若有合法交易,輸出一行 AAA 異常值,中間一個空白;AAA 固定為三位數,異常值是該店家最多的同種交易筆數。否則只輸出 invalid。
範例
範例輸入:
6
065123000100505
007555000200941
065123000200588
007555000300917
001111000100109
007222000800302
範例輸出:
007 2
範例中第 5 筆交易的檢查碼錯誤,不計入。其餘交易按店家、分類和金額分組後:
| 店家 AAA | 分類 BBB | 金額 DDD | 這種交易有幾筆 |
|---|---|---|---|
| 007 | 555 | 009 | 2 |
| 007 | 222 | 003 | 1 |
| 065 | 123 | 005 | 2 |
店家 007 雖然共有 3 筆合法交易,但最多的一種只有 2 筆,所以異常值是 2;店家 065 的異常值也是 2。兩間店家並列,取編號較小的 007,因此輸出 007 2。
範例測資
範例輸入 1
6 065123000100505 007555000200941 065123000200588 007555000300917 001111000100109 007222000800302
範例輸出 1
007 2
討論與題解
載入討論區…