題目連結: https://zerojudge.tw/ShowProblem?problemid=b563
# 解題思路
因為沒有給定 A、 B 兩數的範圍,因此我自己是用 map (這是 C++ 的容器之一),將一對申請案 (x, y) ,即 x 校到 y 校,對應到一個整數,而該整數是用來紀錄有多少個同為 (x, y) 這種申請案。
當進來一筆申請案 (A, B),看看有沒有申請案 (B, A) 的存在。如果有,則將 (B, A) 的申請案數量 - 1 ,並將通過的申請對數 + 1 ;反之,將 (A, B) 申請案數目 + 1。
跑完所有筆申請案之後,最後的申請對數即是所求。
# 程式碼
#include <iostream> | |
#include <utility> | |
#include <map> | |
using namespace std; | |
#define apply(x, y) (pair <int, int>(x, y)) | |
int main() { | |
cin.sync_with_stdio(false), cin.tie(0); | |
map <pair <int, int>, int> mp; | |
int t, cnt, from, to; | |
while (cin >> t) { | |
mp.clear(), cnt = 0; | |
while (t--) { | |
cin >> from >> to; | |
if (mp[apply(to, from)]) | |
++cnt, --mp[apply(to, from)]; | |
else | |
++mp[apply(from, to)]; | |
} | |
cout << cnt << '\n'; | |
} | |
} |