偉哉北一機研,109學年度招生大成功! 全校700多名學生,有698名以機研為第一志願,身為北一第一大社,機研理所當然地收了全部的學生,但是由於學校行政效率及品質的低落,送來的名單,居然是亂七八糟的QQ 這讓社長頭很痛,於是就笨笨的人工把698名學妹的資料 (姓名、班級、座號、個介),按照班級座號排好了。站在一旁的程式教學實在是看不下去,就想要寫一個程式,造福未來的幹部們,但是她也一樣笨,想了好久都想不到方法。請聰明的妳,幫忙寫一個程式,把社團成員的資料按照班級排序,若是班級相同,就按照座號排序。
範例測資
範例輸入 | 範例輸出 |
---|---|
每筆測資第一行會輸入 N,代表應屆學妹的人數,接著會有 N 行輸入,格式如下: 姓名 班級 座號 個介 其中「姓名」和「個介」中不含有空白, 「班級」和「座號」為整數。 ( N <= 105) | 請輸出排序過後的社員資料表,對於每個社員,輸出兩行 第一行為 : 班級 座號 姓名 (以空白隔開) 第二行為 : 個介 |
3 陳希臻 15 12 我喜歡吸貓 鄭允臻 14 27 我討厭陳芭樂 魏家琦 8 37 我其實是白家琦 | 8 37 魏家琦 我其實是白家琦 14 27 鄭允臻 我討厭陳芭樂 15 12 陳希臻 我喜歡吸貓 |
解題思路
將「班級」和「座號」存到一個 Pair<int, int> 中,並且存放到一個 陣列/Vector 中,然後把「姓名」和「個介」存到一個 Pair<string, string> 中。宣告一個 Map<pair<int, int>, pair<string, string>> 的資料型態,這個 Map 的 Key 值就是「班級」和「座號」的 Pair,Value 值就是「姓名」和「個介」的 Pair。
將存有 Pair<int, int> 的 陣列/Vector 進行 Sort 之後,由小到大將 陣列/Vector 中的「班級」和「座號」依序輸出。同時,使用每次輸出的 Pair<int, int> 的 Map 對應到的 Value 值來輸出「姓名」和「個介」的 Pair<string, string>。
範例程式碼-ZeroJudge F277: 嘿嘿想不到吧
#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 F277
//Dr. SeanXD