a053. 校園悠遊卡異常交易分析

中等陣列字串APCS 中級難度

時間限制 2000 ms ・ 記憶體限制 256 MB

題目敘述

學校合作社蒐集了 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這種交易有幾筆
0075550092
0072220031
0651230052

店家 007 雖然共有 3 筆合法交易,但最多的一種只有 2 筆,所以異常值是 2;店家 065 的異常值也是 2。兩間店家並列,取編號較小的 007,因此輸出 007 2。

範例測資

範例輸入 1

6
065123000100505
007555000200941
065123000200588
007555000300917
001111000100109
007222000800302

範例輸出 1

007 2
請先登入後再提交程式碼

討論與題解

載入討論區…

更多