ZeroJudge F277: 嘿嘿想不到吧

題目敘述

每筆測資第一行會有一個正整數N,接下來會有N筆資料,每筆資料會依序輸入一個字串 (代表學生名字)、一個整數 (代表學生班級)、一個整數 (代表學生座號)、和一個字串 (代表學生自介)。要求將班級和座號排序過後輸出班級、座號、名字、和自介 (格式請見範例輸出)。


範例輸入 #1

3

陳希臻 15 12 我喜歡吸貓

鄭允臻 14 27 我討厭陳芭樂

魏家琦 8 37 我其實是白家琦

範例輸出 #1

8 37 魏家琦

我其實是白家琦

14 27 鄭允臻

我討厭陳芭樂

15 12 陳希臻

我喜歡吸貓


解題思路

可以使用Pair和Map的方式將數字和字串分開來存,並用Pair來做排序,最後輸出排序過後的Pair和Map中的對應值即可。

解題程式碼如下 (僅供參考):

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

pair<int, int> rtn(int a, int b)
{
    pair<int, int>tmp;
    tmp.first = a;
    tmp.second = b;
    return tmp;
}

pair<string, string> pp (string a, string b)
{
    pair<string, string>tmp;
    tmp.first = a;
    tmp.second = b;
    return tmp;
}

int main() {
    int N;
    cin >> N;
    vector<pair<int, int>>v;
    map<pair<int, int>, pair<string, string>>MAP;
    for (int i = 0; i<N; i++)
    {
        string name, word;
        int c, no;
        cin >> name >> c >> no >> word;
        pair<int, int>p = rtn(c, no);
        v.push_back(p);
        MAP[p] = pp(name, word);
    }
    sort(v.begin(), v.end());
    for (int i = 0; i<N; i++)
    {
        cout << v[i].first << " " << v[i].second << " " << MAP[v[i]].first << "\n" << MAP[v[i]].second << "\n";
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天