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;
}
posted @ 2023-11-11 21:41  Trilliverse  阅读(5)  评论(0编辑  收藏  举报