題目連結: 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';
	}
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay