通訊錄排序

1.0s 256M

通訊錄的名單是照報名順序打的,老師要一份照座號由小到大排好的版本。

請定義結構體 student——三個成員與 read()、print() 跟〔通訊錄查詢〕完全相同——再照 14.6 運算子多載:讓結構體學會比大小 的寫法多載 operator <,教會它「座號小的排前面」。有了 <,評測程式不用給 sort 第三個參數就能直接排序;min_element 這種靠「小於」吃飯的內建函式也跟著能用。

成員 型態/簽名 意義
name string 姓名(小寫英文字母)
seat int 座號(保證互不相同)
phone string 電話(恰 \(10\) 個數字,可能以 0 開頭)
read() void read() 從 cin 依序讀入自己的姓名、座號、電話
print() void print() 用 cout 印出一行 座號 姓名 電話(以一個空白分隔),結尾換行
operator < bool operator < (const student &b) const 自己的座號比 b 的小就回傳 true——兩個 const 都要寫

你只需要寫這個結構體的定義,不用寫 main、不用 #include 任何東西——評測程式會自動在你的程式最上方加上這題需要的標頭(<iostream>、<string>)與 using namespace std;,要用其他標頭自己再 #include 即可。想把含有 main 的完整程式貼上來測試也可以,評測時會忽略你的 main。

可以直接複製下面的骨架來改:

struct student {
    // 在這裡宣告三個成員

    void read() {
        // 讀入自己的三筆資料
    }
    void print() {
        // 印出「座號 姓名 電話」並換行
    }
    bool operator < (const student &b) const {
        // 自己是否必須排在 b 前面?
    }
};

評測程式會做的事

評測程式會 #include 你的程式,然後:

  1. 讀入 \(N\),宣告 vector<student> a(N),對每位同學呼叫 a[i].read() 讀入資料。
  2. student first = *min_element(a.begin(), a.end());——用你的 < 找出座號最小的同學,整包複製一份留著。
  3. sort(a.begin(), a.end());——不給第三個參數,sort 自動用你多載的 < 排序。
  4. 依排好的順序,對每位同學呼叫 a[i].print()。
  5. 最後多印一行 first.name。

若不符合規格,編譯訊息的第一行會告訴你缺了什麼,例如 [檢查] student 還沒有多載 operator <(記得兩個 const)。

輸入格式

(這是評測程式讀的輸入。)第一行有一個整數 \(N\)。接下來 \(N\) 行,每行依序是一位同學的姓名、座號、電話,以一個空白分隔。

限制

  • \(1 \le N \le 2 \times 10^5\)
  • 姓名由 \(1\) 到 \(10\) 個小寫英文字母組成
  • \(1 \le\) 座號 \(\le 10^9\),且所有座號互不相同
  • 電話恰為 \(10\) 個數字(0 到 9),可能以 0 開頭

輸出格式

輸出 \(N + 1\) 行:前 \(N\) 行是照座號由小到大排好的名單,每行 座號 姓名 電話,以一個空白分隔;第 \(N + 1\) 行是座號最小的同學的姓名。

範例輸入 1

4
amy 30 0912345678
bob 7 0987654321
cathy 1000000000 0900000000
dora 2 0955555555

範例輸出 1

2 dora 0955555555
7 bob 0987654321
30 amy 0912345678
1000000000 cathy 0900000000
dora

範例解釋 1

座號由小到大是 dora(\(2\))、bob(\(7\))、amy(\(30\))、cathy(\(10^9\)),最後一行是座號最小的 dora。注意排序的依據是座號,不是姓名的字母順序;座號最大到 \(10^9\),int 裝得下。

題目頁說明

快速鍵

主要功能

  • 範例測試 — 執行題目附帶的範例測資並自動比對預期輸出。
  • 自訂測試 — 自己貼 stdin 執行程式。可勾選「與預期輸出比對 (diff)」做行對行比對。
  • 模板 — 貼上你在個人資料設定的預設程式碼模板。
  • 協作 — 與其他同學共筆編輯這題的程式碼。
  • 自動草稿 — 編輯器內容每 1.5 秒自動存到瀏覽器(per 帳號 / 題目 / 語言)。
  • 提交 — 把程式碼交給 judge 評測,回傳 AC / WA / TLE 等結果。

限制

  • 程式碼最多 65,536 字元
  • 自訂測試 stdin 與預期輸出各最多 1 MB (約 100 萬字元)
  • 自訂測試與範例測試共用一個沙箱,每人約 3 秒 1 次 (範例測試 1 秒 1 次)
  • 自訂測試與範例測試都有 15 秒 牆鐘上限(正式評測仍依題目原本時限)
  • 互動題不提供自訂測試(無法模擬與 judge 互動)。
  • 提交評測本身沒有 rate limit,但同題短時間內多次提交會被視為刷分。