你说的对,但是寄了(悬2关)
查看原帖
你说的对,但是寄了(悬2关)
518500
Ted_LightningTechG_楼主2024/7/28 23:12

Rt.#3,#4WA

#include<bits/stdc++.h>
#define max(x, y) (x > y ? x : y)
#define min(x, y) (x < y ? x : y)

struct node{
	int x, y;
};
int n, x, y, m;
int ins;
bool mp[500][500];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};

void Bfs(int x, int y) {
	std::queue<node> que;
	mp[x][y] = true;
	que.push({x, y});
	while(! que.empty()) {
		node fth = que.front();
		que.pop(), ins ++;
		for(int i = 0; i < 4; i ++) {
			node son = {fth.x + dx[i], fth.y + dy[i]};
			if(mp[son.x][son.y]) continue;
			mp[son.x][son.y] = true, que.push(son);
		}
	}
}

int main() {
	std::cin >> n >> x >> y;
	int bgn_x = x, bgn_y = y;
	for(int i = 2; i <= n; i ++) {
		int lst_x = x, lst_y = y;
		std::cin >> x >> y;
		for(int u = min(lst_x, x); u <= max(lst_x, x); u ++) 
			for(int v = min(lst_y, y); v <= max(lst_y, y); v ++) 
				mp[u + 200][v + 200] = true, m ++;
	}
	for(int u = min(x, bgn_x); u <= max(x, bgn_x); u ++) 
		for(int v = min(y, bgn_y); v <= max(y, bgn_y); v ++) 
			mp[u + 200][v + 200] = true, m ++;
	Bfs(bgn_x + 201, bgn_y + 201);
	std::cout << (m - n) / 2 + ins - 1;
	return 0;
}
2024/7/28 23:12
加载中...