題目敘述
每筆測資第一行有兩個正整數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";
}
留言
張貼留言