#include<cstdio> //得分100
#include<iostream>
using namespace std;
struct Re{
long long int x,y;
int flag;
};
const int N=1001;
Re r[N];
int score[5];
int main()
{
int n,i,j,k,t;
long int X,Y;
cin>>n;
for(i=0;i<n;i++)
{
cin>>r[i].x>>r[i].y;
r[i].flag=0;
}
for(i=0;i<n;i++)//求 存在 上下左右四个邻居 的点
{
X=r[i].x;
Y=r[i].y;
k=0;
for(j=0;j<n;j++)
{
if(r[j].x==X&&r[j].y-1==Y) k++;
if(r[j].x==X&&r[j].y+1==Y) k++;
if(r[j].y==Y&&r[j].x-1==X) k++;
if(r[j].y==Y&&r[j].x+1==X) k++;
}
if(k==4)
r[i].flag=1;
}
for(i=0;i<n;i++) //评分
{
if(r[i].flag) //不要忘了满足条件1、2才能评分
{
X=r[i].x;
Y=r[i].y;
t=0;
for(j=0;j<n;j++)
{
if(r[j].x+1==X&&r[j].y+1==Y) t++;
if(r[j].x+1==X&&r[j].y-1==Y) t++;
if(r[j].x-1==X&&r[j].y-1==Y) t++;
if(r[j].x-1==X&&r[j].y+1==Y) t++;
}
score[t]++;
}
}
for(i=0;i<5;i++)
cout<<score[i]<<endl;
return 0;
}
感悟:一开始用数组写的,但是写错了,后来改用结构体写,就满分了。下边是用数组写的,运行错误,得分50分,但是没看出来哪错的,敬请大佬指点一二。
//201912-2回收站选址
#include<cstdio>
#include<iostream>
using namespace std;
const long int N=1001; //#define N 11 //这样写 得分50,运行错误,敬请大佬指点
int str[N][N];
int score[5];
int main()
{
int n,i,j,k,x,y;
cin>>n;
for(i=0;i<n;i++)
{
cin>>x>>y;
str[x][y]=1;
}
for(i=1;i<N;i++)
{
for(j=1;j<N;j++)
{
if(str[i][j])
{
if(str[i][j+1]&&str[i][j-1]&&str[i+1][j]&&str[i-1][j])
{
k=0;
if(str[i+1][j+1]) k++;
if(str[i-1][j-1]) k++;
if(str[i-1][j+1]) k++;
if(str[i+1][j-1]) k++;
score[k]++;
}
}
}
}
for(i=0;i<5;i++)
cout<<score[i]<<endl;
return 0;
}