一:问题
二:理解
题意:
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<bits/stdc++.h>
#include<iostream>
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;
}
再做一次的结果还是没有第一次的好一些。总想着用地图的方式将其存下来标记位置,直接判断方向。忽略了数据的庞大,其实这样就是多循环了而已(比较费时)。但好像也想不出别的方法。