这个我用类和函数写的,用的东西比较简单,但是写起来略有点麻烦,有点长。不过这几个函数大同小异,粘贴就可以。一开始理解错了题意,以为是输出的是每个点的上下左右每个记一分。其实是要确定回收站后,再看左上左下右上右下的四个点的得分 。
#include
using namespace std;
class Point{
public:
int x;
int y;
void input();
};
void Point::input(){
cin>>x>>y;
}
const int NUM=1001;
Point pot[NUM];
int T[5]={
0};
int main()
{
int n,t1,t2,t3,t4,t;
int a1,a2,a3,a4,a;
cin>>n;
int shang(Point p1,Point p[],int n);
int xia(Point p1,Point p[],int n);
int zuo(Point p1,Point p[],int n);
int you(Point p1,Point p[],int n);
int zuoshang(Point p1,Point p[],int n);
int zuoxia(Point p1,Point p[],int n);
int youshang(Point p1,Point p[],int n);
int youxia(Point p1,Point p[],int n);
for(int i=0; i<n; i++)
pot[i].input();
for(int i=0; i<n; i++)
{
t1=shang(pot[i],pot,n);
t2=xia(pot[i],pot,n);
t3=zuo(pot[i],pot,n);
t4=you(pot[i],pot,n);
t=t1+t2+t3+t4;
if(t==4){
a1=zuoshang(pot[i],pot,n);
a2=zuoxia(pot[i],pot,n);
a3=youshang(pot[i],pot,n);
a4=youxia(pot[i],pot,n);
a=a1+a2+a3+a4;
}else continue;
switch(a)
{
case 0:T[0]++;break;
case 1:T[1]++;break;
case 2:T[2]++;break;
case 3:T[3]++;break;
case 4:T[4]++;break;
default :break;
}
}
for(int i=0; i<5; i++)
cout<<T[i]<<endl;
return 0;
}
int shang(Point p1,Point p[],int n)
{
int c=0;
p1.y=p1.y+1;
for(int i=0; i<n; i++)
if((p1.x==p[i].x)&&(p1.y==p[i].y))c++;
return c;
}
int xia(Point p1,Point p[],int n)
{
int c=0;
p1.y=p1.y-1;
for(int i=0; i<n; i++)
if((p1.x==p[i].x)&&(p1.y==p[i].y))c++;
return c;
}
int zuo(Point p1,Point p[],int n)
{
int c=0;
p1.x=p1.x+1;
for(int i=0; i<n; i++)
if((p1.x==p[i].x)&&(p1.y==p[i].y))c++;
return c;
}
int you(Point p1,Point p[],int n)
{
int c=0;
p1.x=p1.x-1;
for(int i=0; i<n; i++)
if((p1.x==p[i].x)&&(p1.y==p[i].y))c++;
return c;
}
int zuoshang(Point p1,Point p[],int n)
{
int c=0;
p1.x=p1.x-1;
p1.y=p1.y+1;
for(int i=0; i<n; i++)
if((p1.x==p[i].x)&&(p1.y==p[i].y))c++;
return c;
}
int zuoxia(Point p1,Point p[],int n)
{
int c=0;
p1.x=p1.x-1;
p1.y=p1.y-1;
for(int i=0; i<n; i++)
if((p1.x==p[i].x)&&(p1.y==p[i].y))c++;
return c;
}
int youshang(Point p1,Point p[],int n)
{
int c=0;
p1.x=p1.x+1;
p1.y=p1.y+1;
for(int i=0; i<n; i++)
if((p1.x==p[i].x)&&(p1.y==p[i].y))c++;
return c;
}
int youxia(Point p1,Point p[],int n)
{
int c=0;
p1.x=p1.x+1;
p1.y=p1.y-1;
for(int i=0; i<n; i++)
if((p1.x==p[i].x)&&(p1.y==p[i].y))c++;
return c;
}