ZeroJudge F579: 購物車

題目敘述

每筆測資第一行有兩個正整數a和b,第二行會有一個正整數N,接下來會有N行,每行有若干個非0的整數,當輸入的數字為0時停止收資料換下一行。當數字為正數時,代表將編號為此數字的商品放入購物車,當數字為負數時,代表將編號為此數字*-1的商品拿出。要求輸出有幾個購物車在最後同時有a和b兩個商品。


範例輸入 #1

1 8

5

1 8 0

5 6 0

2 7 0

8 1 0

33 22 0

範例輸出 #1

2


範例輸入 #2

3 9

2

3 9 -3 3 9 0

3 3 -3 -3 9 0

範例輸出 #2

1


解題思路

收購物車資料的時候可以用EOF,可以用Map來紀錄商品的進出,最後判斷a和b在Map中的值有沒有大於0即可。

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

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

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int a, b;
    cin >> a >> b;
    int N;
    cin >> N;
    int ans = 0;
    for (int i = 0; i<N; i++)
    {
        int tmp;
        map<int, int>MAP;
        while (cin >> tmp && tmp != 0)
        {
            if (tmp > 0) MAP[tmp]++;
            else MAP[tmp*-1]--;
        }
        if (MAP[a] > 0 && MAP[b] > 0) ans++;
    }
    cout << ans << "\n";
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天