




思路:设置两个计数变量flag和count,分别表示相邻四个点中存在的个数和对角线四个角中存在的个数,只有当flag==4时,count的值为所求。
#include <iostream>
using namespace std;
typedef struct point{
int x;
int y;
}point;
int main()
{
int n;
cin >> n;
point a[n];
int b[5]={0};
for(int i=0;i<n;i++)
{
cin >> a[i].x >> a[i].y;
}
for(int i=0;i<n;i++)
{
int count=0,flag=0;
for(int j=0;j<n;j++)
{
if((a[j].x==a[i].x&&a[j].y==a[i].y+1)||(a[j].x==a[i].x&&a[j].y==a[i].y-1)||(a[j].x==a[i].x+1&&a[j].y==a[i].y)||(a[j].x==a[i].x-1&&a[j].y==a[i].y))
flag++;
if((a[j].x+1==a[i].x&&a[j].y+1==a[i].y)||(a[j].x+1==a[i].x&&a[j].y-1==a[i].y)||(a[j].x-1==a[i].x&&a[j].y+1==a[i].y)||(a[j].x-1==a[i].x&&a[j].y-1==a[i].y))
count++;
}
if(flag==4)
{
b[count]++;
}
}
for(int i=0;i<5;i++)
{
cout << b[i] << endl;
}
return 0;
}
注意:以下语句必须在里层循环的外面。因为flag等于4时count还未必计算完了。
if(flag==4)
{
b[count]++;
}
另外注意思想的简洁性,整个很大的数组的思想是万万不对的。
测试数据:
7
1 2
2 1
0 0
1 1
1 0
2 0
0 1
2
0 0
-100000 10
11
9 10
10 10
11 10
12 10
13 10
11 9
11 8
12 9
10 9
10 11
12 11
博客介绍了一种算法的解题思路,设置计数变量flag和count,分别统计相邻四个点和对角线四个角的存在个数,当flag等于4时,count为所求结果。同时强调了语句位置和思想简洁性,还提及了测试数据。
9233

被折叠的 条评论
为什么被折叠?



