CCF-201912-2(回收站选址)

一:问题
CCF-201912-2(回收站选址)_第1张图片
CCF-201912-2(回收站选址)_第2张图片CCF-201912-2(回收站选址)_第3张图片
二:理解
题意:
1.判断垃圾站
2.判断这个垃圾站的十字方向是不是存在垃圾站,有几个就是几分,这个几分就循环+1;

首先就是先将输入的每个坐标都记录一下,用结构体来存储。
我用的就是暴力:
每个点都先判断是不是垃圾站

for(int j=0; j<n; j++)
{
     
	if(x==coord[j].x && y+1==coord[j].y)  //上 
		temp++;
	if(x+1==coord[j].x && y==coord[j].y)  //右 
		temp++;
	if(x==coord[j].x && y-1==coord[j].y)  //下
		temp++;
	if(x-1==coord[j].x && y==coord[j].y) //左 
		temp++;
	if(temp == 4)
		break; 
}

如果是垃圾站就判断他的得分;

if(temp == 4) 
{
                                                              
	int count = 0;
	//统计分数个数 
	for(int j=0; j<n; j++)
	{
     
		if(x+1==coord[j].x && y+1==coord[j].y)  //右上 
			count++; 
		if(x+1==coord[j].x && y-1==coord[j].y)  //右下 
			count++;
		if(x-1==coord[j].x && y-1==coord[j].y)  //左下 
			count++;
		if(x-1==coord[j].x && y+1==coord[j].y)  //左上 
			count++;					
	}
	num[count]++;
}

三:代码

#include
#include
using namespace std;

struct node {
     
	int x;
	int y;
}coord[1005];
int num[5] = {
     0};  //对应得分的个数 

int main() 
{
     
	int n;
	cin >> n;
	for(int i=0; i<n; i++)
		cin >> coord[i].x >> coord[i].y;
	 
	for(int i=0; i<n; i++)
	{
     
		int x = coord[i].x;
		int y = coord[i].y;
		int temp = 0;
		//这个点是不是回收站 
		for(int j=0; j<n; j++)
		{
     
			if(x==coord[j].x && y+1==coord[j].y)  //上 
				temp++;
			if(x+1==coord[j].x && y==coord[j].y)  //右 
				temp++;
			if(x==coord[j].x && y-1==coord[j].y)  //下
				temp++;
			if(x-1==coord[j].x && y==coord[j].y) //左 
				temp++;
			if(temp == 4)
				break; 
		}
		if(temp == 4) 
		{
                                                              
			int count = 0;
			//统计分数个数 
			for(int j=0; j<n; j++)
			{
     
				if(x+1==coord[j].x && y+1==coord[j].y)  //右上 
					count++; 
				if(x+1==coord[j].x && y-1==coord[j].y)  //右下 
					count++;
				if(x-1==coord[j].x && y-1==coord[j].y)  //左下 
					count++;
				if(x-1==coord[j].x && y+1==coord[j].y)  //左上 
					count++;					
			}
			num[count]++;
		}
	}
	for(int i=0; i<5; i++)
		cout << num[i] << endl; 
	return 0;
}

再做一次的结果还是没有第一次的好一些。总想着用地图的方式将其存下来标记位置,直接判断方向。忽略了数据的庞大,其实这样就是多循环了而已(比较费时)。但好像也想不出别的方法。

你可能感兴趣的:(CCF练习,回收站选址,CCF)