L 犯大吴疆土
L 犯大吴疆土
Description:
- 大吴疆土可视作 \(N\times N\) 的散点图,有 \(M\) 名敌国大将袭击了大吴疆土,袭击位置坐标分别为\((x_1,y_1),(x_2,y_2)...(x_m,y_m)\)。大吴派出了 \(K\) 名大将进行驻守,每名大将被要求驻守位置分别是\((x_1,y_1),(x_2,y_2)...(x_k,y_k)\),保证\(1\le x_i,y_i \le N\)。可能有多名敌国大将袭击同一位置,也可能多名大吴大将驻守同一个位置。
- 一个位置如果被敌国大将袭击,且这个位置驻守的大吴大将数量少于袭击此处的敌国大将的数量,那么这个地方将被攻占。请算出被攻占的位置数量。
Constraints:
- \(1\le N\le 10^6\)
- \(1\le M\le 10^5\)
- \(0\le K\le 10^5\)
Analysis:
- 将坐标看为一个整体,用 map 记录即可;可以用pair,也可以用结构体(要重载运算符,否则 map 无法对key比较!)
Solution:
// pair存储坐标 //
map< pair<int,int> ,int> mp;
int main() {
int n,m,k; cin >> n >> m >> k;
for(int i=0;i<m;i++) {
int x,y; cin >> x >> y;
mp[make_pair(x,y)] -= 1;
}
for(int i=0;i<k;i++) {
int x,y; cin >> x >> y;
mp[make_pair(x,y)] += 1;
}
int ans = 0;
for(auto it : mp) {
if(it.second < 0) ans ++;
}
cout << ans << endl;
return 0;
}
// struct存储坐标(重载运算符!)//
struct Node {
int x,y;
Node(){}
Node(int x,int y):x(x),y(y){}
bool operator < (const Node &A) const { //不要忘了后面还有一个const!!
if(x == A.x) return y < A.y;
return x < A.x;
}
};
map<Node,int> mp;
int main() {
int n,m,k; cin >> n >> m >> k;
for(int i=0;i<m;i++) {
int x,y; cin >> x >> y;
mp[Node(x,y)] -= 1;
}
for(int i=0;i<k;i++) {
int x,y; cin >> x >> y;
mp[Node(x,y)] += 1;
}
int ans = 0;
for(auto it : mp) { // 注意auto遍历aaa
if(it.second < 0) ans ++; // .second!!!
}
cout << ans << endl;
return 0;
}
本文来自博客园,作者:Trilliverse,转载请注明原文链接:https://www.cnblogs.com/Trilliverse/p/17826388.html