0%
约 2 分钟
CSP 201912-2回收站选址 C++ 100
题目
【题目背景】 开学了,可是校园里堆积了不少垃圾杂物。热心的同学们纷纷自发前来清理,为学校注入正能量~
【题目描述】 通过无人机航拍我们己经知晓了n处尚待清理的垃圾位置,其中第i(1≤i≤n)处的坐标为(xi,yi),保证所有的坐标均为整数。我们希望在垃圾集中的地方建立些回收站。具体来说,对于一个位置(x,y)是否适合建立回收站,我们主要考虑以下几点: ·(x,y)必须是整数坐标,且该处存在垃圾: ·上下左右四个邻居位置,即(xy+1)、(K,y-1)、(x+1,y)和(x-1,)处,必须全部存在垃圾: ·进一步地,我们会对满足上述两个条件的选址进行评分,分数为不大于4的自然数,表示在(x±1,y±1)四个对角位置中有几处存在垃圾。 现在,请你统计一下每种得分的选址个数。
【输入格式】 从标准输入读入数据。 输入总共有n+1行。 第1行包含一个正整数n,表示己查明的垃圾点个数。 第1+i行(1≤i≤n)包含由一个空格分隔的两个整数:和,表示第i处垃圾的坐标。 保证输入的n个坐标互不相同。
【输出格式】 输出到标准输出。 输出共五行,每行一个整数,依次表示得分为0、1、2、3和4的回收站选址个数。
【样例1输入】
7
12
21
00
11
18
20
01
【样例1输出】
9
0
1
8
0
代码
#include<bits/stdc++.h>
using namespace std;
const int N=300+5;
struct pos
{
int x,y;
};
int main()
{
int n;
int a[5]={0};
vector<pos> p;
pos q;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>q.x>>q.y;
p.push_back(q);
}
for(int k=0;k<n;k++)
{
int neighbors=0,cnt=0;
for(int i=0;i<n;i++)
{
if(p[i].x==p[k].x-1&&p[i].y==p[k].y)
neighbors++;
else if(p[i].x==p[k].x&&p[i].y==p[k].y-1)
neighbors++;
else if(p[i].x==p[k].x&&p[i].y==p[k].y+1)
neighbors++;
else if(p[i].x==p[k].x+1&&p[i].y==p[k].y)
neighbors++;
else if(p[i].x==p[k].x-1&&p[i].y==p[k].y-1)
cnt++;
else if(p[i].x==p[k].x-1&&p[i].y==p[k].y+1)
cnt++;
else if(p[i].x==p[k].x+1&&p[i].y==p[k].y-1)
cnt++;
else if(p[i].x==p[k].x+1&&p[i].y==p[k].y+1)
cnt++;
}
if(neighbors==4)
a[cnt]++;
}
for(int i=0;i<5;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
评论