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

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int n;
	cin >> n; //输入n
	vector<vector<int>> bin(n, vector<int>(2));
	vector<int> 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;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值