日期:2025年11月7日
ZeroJudge 題目連結:g489. 社團點點名
解題想法
題目說明有問題,測資中有不在社團名單裡的出席者,所以答案有可能是負的。用集合 members 儲存社團成員學號,再用另一個集合 present 儲存非社團成員但有出席的人,最後將兩者的數量相減即可。
Python 程式碼
使用時間約為 44 ms,記憶體約為 3.6 MB,通過測試。
m, n = map(int, input().split()) # 社團人數 m,有到的人數 n
members = set([input() for _ in range(m)]) # 社團成員學號
present = set() # 非社團成員但有出席的人
for _ in range(n): # 讀取 n 行資料
s = input() # 學號
if s in members: members.remove(s) # s 是社團成員,從 members 移除 s
else: present.add(s) # s 不是社團成員,s 加入 present
print(len(members) - len(present))
C++ 程式碼
使用時間約為 6 ms,記憶體約為 476 kB,通過測試。
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main() {
int m, n; cin >> m >> n; // 社團人數 m,有到的人數 n
set<string> members, present; // 社團成員學號,非社團成員但有出席的人
for(int i=0; i<m; i++) { // 讀取 m 行資料
string s; cin >> s;
members.insert(s);
}
for(int i=0; i<n; i++) { // 讀取 n 行資料
string s; cin >> s;
if (members.count(s) == 1) members.erase(s); // s 是社團成員,從 members 移除 s
else present.insert(s); // s 不是社團成員,s 加入 present
}
cout << (int)members.size() - (int)present.size() << "\n";
return 0;
}
沒有留言:
張貼留言