csp 回收站选址

//个人思路:根据题目描述先筛选出满足适合做垃圾站的坐标,然后再从这些垃圾站中判断每个垃圾站右上右下左上左下是否存在垃圾点(注意是垃圾点),每有一个加一分即可,根据题意即可。(详情见代码注释)

//回收站选址
#include<iostream>
using namespace std;
#define max 1005
typedef struct  
{
	int x, y;
	int grbgBinFlag; //垃圾回收站标记,标记0代表不是站点
}GrbgPon;//垃圾点 
void judegGrbgBin(GrbgPon gP[], int n);
void calcGrbgBinSrc(GrbgPon gP[], int n, int sum[]);
GrbgPon gP[max];  //全局区变量默认为0; 
int main()
{
	int n;//垃圾点坐标数
	cin >> n; 
	int sum[5] = {0}; //最后计算的分数 
	for(int i = 0; i < n; ++i)//输入垃圾点坐标 
		cin >> gP[i].x >> gP[i].y;;
	judegGrbgBin(gP,n);
	calcGrbgBinSrc(gP,n,sum);
	for(int i = 0; i < 5; ++i)
		cout << sum[i] << endl;
	return 0;
} 
//判断是否是垃圾站点 
void judegGrbgBin(GrbgPon gP[], int n) //n为垃圾点数目 
{
	for(int i = 0; i < n; ++i) 
	{
		int pos = 0;//上下左右满足位置的个数,只有四个位置全部有垃圾点才是垃圾站
		for(int j = 0; j < n; ++j)
		{
			//上下左右四侧 
			if((gP[i].x == gP[j].x && gP[i].y + 1 == gP[j].y)|| 
			 (gP[i].x == gP[j].x && gP[i].y - 1 == gP[j].y )||
			(gP[i].x - 1 == gP[j].x && gP[i].y == gP[j].y) ||
			(gP[i].x + 1 == gP[j].x && gP[i].y == gP[j].y) )
				pos += 1;
		} 
		if(pos == 4)
			gP[i].grbgBinFlag = 1;//满足垃圾站要求
	}	 
} 

//计算垃圾站得分
void calcGrbgBinSrc(GrbgPon gP[], int n,int sum[])
{
	for(int i = 0; i < n; ++i) 
	{
		int pos = 0;
		if(gP[i].grbgBinFlag == 1) 
		{
			for(int j = 0; j < n; ++j)
			{
				//右上左上左下右下四侧 
				if(gP[i].x + 1 == gP[j].x && gP[i].y + 1 == gP[j].y|| 
				gP[i].x - 1 == gP[j].x && gP[i].y + 1 == gP[j].y||
				gP[i].x - 1 == gP[j].x && gP[i].y - 1 == gP[j].y||
				gP[i].x + 1 == gP[j].x && gP[i].y - 1 == gP[j].y)
				 	pos+=1;
			} 
			//统计不同得分情况的回收站个数 
			switch(pos)
			{
				case 0:
					sum[0]+=1;
					break;
				case 1:
					sum[1]+=1;
					break;
				case 2:
					sum[2]+=1;
					break;
				case 3:
					sum[3]+=1;
					break;
				case 4:
					sum[4]+=1;
					break;
			} 
		}	 
	}
}
 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值