ZeroJudge L922: 古堡長廊 (Castle)

題目敘述

每筆測資第一行有一個正整數N,接下來會有N行,每行有一個字串和一個數字。要求輸出將數字排序過後的字串 (需轉乘整數型態輸出)。


範例輸入 #1

ONE 368 

THREE 1980 

SEVEN 1624

範例輸出 #1

173


範例輸入 #2

FOUR 1911 

SIX 1914 

NINE 1782 

EIGHT 573 

TWO 42 

FIVE 987

範例輸出 #2

285946


解題思路

使用Pair的方式將字串和年份輸入,這樣可以直接做排序。字串轉乘數字可以使用Map來做判斷。

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

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

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

int main() {
    map<string, int>MAP;
    MAP["ONE"] = 1;
    MAP["TWO"] = 2;
    MAP["THREE"] = 3;
    MAP["FOUR"] = 4;
    MAP["FIVE"] = 5;
    MAP["SIX"] = 6;
    MAP["SEVEN"] = 7;
    MAP["EIGHT"] = 8;
    MAP["NINE"] = 9;
    int N;
    cin >> N;
    vector<pair<int, int>>v;
    for (int i = 0; i<N; i++)
    {
        string str;
        int num;
        cin >> str >> num;
        v.push_back(rtn(num, MAP[str]));
    }
    sort(v.begin(), v.end());
    for (int i = 0; i<N; i++)
    {
        cout << v[i].second;
    }
    cout << "\n";
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天