ZeroJudge F446: Expert Enough

題目敘述

每筆測資第一行有一個正整數T,代表接下來會有T組資料。每組資料第一行會有一個正整數N,借下來會有N行,每行有一個字串和兩個正整數,分別代表車廠名稱和其生產車輛的價格區間。再來會有一個正整數Q,接下來會有Q行,每行有一個正整數代表要查詢的價格。要求輸出查詢的價格區間的車廠,如果沒有或是超過一個車廠輸出UNDETERMINED,反之則輸出車廠的名稱。


範例輸入 #1

1

4

HONDA 10000 45000

PEUGEOT 12000 44000

BMW 30000 75900

CHEVROLET 7000 37000

4

60000

7500

5000

10000

範例輸出 #1

BMW

CHEVROLET

UNDETERMINED

UNDETERMINED


解題思路

可以使用Vector<Pair>來將價格區間存起來,並且使用Map將車廠名稱利用Pair當索引值存起來。之後可以使用For迴圈一個一個做判斷即可,如果出現超過一個車廠直接Break迴圈節省時間。

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

#include <iostream>
#include <map>
#include <vector>
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() {
    int T;
    cin >> T;
    for (int i = 0; i<T; i++)
    {
        int N;
        cin >> N;
        map<pair<int, int>, string>MAP;
        vector<pair<int, int>>v;
        for (int j = 0; j<N; j++)
        {
            string name;
            int low, high;
            cin >> name >> low >> high;
            pair<int, int>tmp = rtn(low, high);
            v.push_back(tmp);
            MAP[tmp] = name;
        }
        int Q;
        cin >> Q;
        for (int j = 0; j<Q; j++)
        {
            int money, count = 0;
            cin >> money;
            string ans;
            for (auto it:v)
            {
                if (money >= it.first && money <= it.second)
                {
                    count++;
                    ans = MAP[it];
                }
                if (count > 1)
                {
                    cout << "UNDETERMINED\n";
                    break;
                }
            }
            if (count == 1) cout << ans << "\n";
            else if (count == 0) cout << "UNDETERMINED\n";
        }
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天