ZeroJudge G796: 檔案分類 (Files)

公司最近新來了一位助理小明,剛來的第一天長官請小明幫忙把剛處理完的案件檔案分類。每個案件都有一個專屬編號,編號由六個數字所組成,最後面三個數字為其類別編號,其中每十個連續類別編號會被歸在同一個資料夾中。

舉例來說,類別編號 000 到 009 歸為第 0 號資料夾、類別編號 010 到 019 歸為第 1 號資料夾、以此類推。因此,若拿到檔案編號為 103472 之檔案則會被放到第 47 號資料夾中。

請你幫小明順利完成第一天的分類工作。

範例測資

範例輸入範例輸出
輸入第一行為一個整數 N (1 ≤ N ≤ 2000) 代表檔案數,接下來共有 N 行表示每個檔案的編號 Si (000000 ≤ Si ≤ 999999,1 ≤ i ≤ N)。每一行輸出資料夾編號及此資料夾中檔案個數,中間以一個空白隔開。只需輸出有放檔案的資料夾編號,且編號由小到大排列。
1
000000
0 1
5
232944
123941
201322
234941
231320
32 2
94 3
5
987012
342221
223120
126641
127643
1 1
12 1
22 1
64 2

解題思路

可以使用字串來收檔案編號,並且取出字串的第三和第四個字元,這個就是資料夾的編號。

宣告一個 Map<string, int>,Key 值為資料夾的編號,Value 為這個資料夾中有多少檔案,每次收到檔案編號的時候就將 Map[資料夾編號]++。

範例程式碼-ZeroJudge G796: 檔案分類 (Files)

#include <iostream>
#include <map>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    map<int, int>MAP;
    for (int i = 0; i<N; i++)
    {
        string str;
        cin >> str;
        string tmp = "";
        tmp += str[3];
        tmp += str[4];
        MAP[stoi(tmp)]++;
    }
    for (auto it:MAP)
    {
        cout << it.first << " " << it.second << "\n";
    }
}

//ZeroJudge G796
//Dr. SeanXD

發佈留言