---
# System prepended metadata

title: 實作題 - 購物車 - APCS - by Peter Wang
tags: [APCS]

---


# 實作題 - 購物車 - APCS - by Peter Wang
## 題目資訊
此題為2020.7測驗中的題目1
###### tags: `APCS` 

## 題目敘述
給兩個整數 a, b 代表你要觀察的商品編號。

商場在每一位客人的購物車都放置了一個感應器，能夠得知每位客人將商品放入購物車或拿出購物車。感應器存放的紀錄是一連串的整數，一個正整數 x 表示這位客人將一個編號是 x 的商品放入他的購物車，一個負數 −x 表示這位客人將一個編號是 x 的商品從他的購物車移除。

現在有 n 位客人的購物車紀錄，你想要統計有幾位客人最後有購買商品 a 與商品 b，一個客人有購買商品 x 表示商品 x 在他的購物車中放入的次數比拿出還多。

### 輸入：
第一行有兩個正整數 a, b (1≤a,b≤100)。

第二行有一個正整數 n(1≤n≤100)，表示客人的數量。

接下來有 n 行，第 i 行表示第 i 位客人的購物車紀錄。

對於每個購物車紀錄包含一連串的整數，最後一個數字必定為 0，表示購物紀錄結尾，其他數字必定為非 0 的整數且絕對值不超過 100，定義同題目敘述。

### 輸出：
輸出一個整數，表示有幾位客人同時有購買商品 a 與商品 b。

## 解題思路
按照題意實際操作購買與放回，就能完成實作。

## 程式碼
```clike=
#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
int main(){
  int a;
  while(cin>>a){
    int b;
    cin>>b;
    int n;
    cin>>n;
    int x;
    int arr[2];
    int y=0;
    memset(arr,0,sizeof(arr));
    for(int i=0;i<n;i++){
      while(cin>>x){
        if(x==0){
          if(arr[0]>0 && arr[1]>0){
            y++;
          }
          break;
        }
        else{
          if(x==a){
            arr[0]++;
          }
          else if(x==-a){
            arr[0]--;
          }
          else if(x==b){
            arr[1]++;
          }
          else if(x==-b){
            arr[1]--;
          }
        }
      }
      arr[0]=0;
      arr[1]=0;
    }
    cout<<y<<endl;
  }
}
```
## 資料來源
[zerojudge](https://zerojudge.tw/)
[題目敘述](https://zerojudge.tw/ShowProblem?problemid=f579)

## 備註
>[name=PeterWang]
>[time=Sat, Jun 19, 2021 1:46 PM]