【CCF CSP历年考试带注释全题解 C++版】201912-2 回收站选址

【CCF CSP历年考试带注释全题解 C++版】201912-2 回收站选址_第1张图片【CCF CSP历年考试带注释全题解 C++版】201912-2 回收站选址_第2张图片【CCF CSP历年考试带注释全题解 C++版】201912-2 回收站选址_第3张图片

#include 
#include 
using namespace std;

int main() {
	int n;
	cin >> n; //输入n
	vector> bin(n, vector(2));
	vector result(5, 0); //初始化每种得分选址数为0
	for (int i = 0; i < n; i++) { //输入每处垃圾位置
		cin >> bin[i][0] >> bin[i][1];
	}
	for (int i = 0; i < n; i++) { //遍历每一处垃圾
		int orthogonal = 0; //用于统计十字方向的垃圾数量
		int opposite = 0; //用于统计斜十字方向的垃圾数量
		for (int j = 0; j < n; j++) { //判断与所有垃圾位置关系,注意也包括自己
			int x = abs(bin[i][0] - bin[j][0]); //横坐标差绝对值
			int y = abs(bin[i][1] - bin[j][1]); //纵坐标差绝对值
			if (x + y == 1) orthogonal++; //若两个绝对值的和为1,说明是十字邻居
			else if (x * y == 1) opposite++; //若两个绝对值的积为1(或者和为2),说明是斜十字邻居
		}
		if (orthogonal == 4) result[opposite]++; //若有四个十字邻居,则斜十字邻居数对应的得分选址数加1
	}
	for (int i : result) { //输出结果
		cout << i << endl;
	}
	return 0;
}

 

你可能感兴趣的:(CCF,CSP,c++,csp)