CCF-CSP试题201912-2回收站选址 暴力解法满分题解
题目地址:201912-2回收站选址
由于此题测试点9和10中坐标可以是负数,则用二维数组存储坐标不好操作,所以此题采用结构体存储坐标。
具体代码如下:
#include <bits/stdc++.h>
using namespace std;
struct node{
int x,y;
int grade=0;
int flag=0;
};
//判断是否满足垃圾点
bool Jude(node p,int x,int y)
{
if((p.x==x-1&&p.y==y)||(p.x==x+1&&p.y==y)||(p.x==x&&p.y==y+1)||(p.x==x&&p.y==y-1))
{
return true;
}
else
{
return false;
}
}
//得出分数,满足此条件则分数+1
bool GetSum(node p, int x ,int y)
{
if((p.x==x-1&&p.y==y-1)||(p.x==x+1&&p.y==y+1)||(p.x==x-1&&p.y==y+1)||(p.x==x+1&&p.y==y-1))
{
return true;
}
else
{
return false;
}
}
int main()
{
int n;cin>>n;
node point[n+1];
for(int i=1;i<=n;i++)
{
cin>>point[i].x>>point[i].y;
}
for(int i=1;i<=n;i++)
{
int x=point[i].x;
int y=point[i].y;
for(int j=1;j<=n;j++)
{
if(Jude(point[j], x, y))
{
point[i].flag+=1;
}
if(GetSum(point[j], x, y))
{
point[i].grade+=1;
}
}
}
int sum[6];
for(int i=0;i<5;i++)
{
sum[i]=0;
}
for(int i=1;i<=n;i++)
{
if(point[i].flag==4)
{
sum[point[i].grade]++;//直接用point[i].grade作为分数
}
}
for(int i=0;i<5;i++)
{
cout<<sum[i]<<endl;
}
return 0;
}
//2
//0 0
//-100000 10