题目
分析
- 每一个垃圾堆放处都可能是回收站,所以两轮循环,找出所有可以成为回收站的坐标。
- 再两轮循环,确定所有回收站的得分
- 最后输出每种得分的回收站个数
AC代码
#include <iostream>
#include<string>
using namespace std;
struct node
{int x,y,flag,count;
};
int count[5];
int main()
{int i,j,n;cin>>n;node a[n];for(i=0; i<n; i++){cin>>a[i].x>>a[i].y;a[i].flag=0;a[i].count=0;}
//确定回收站for(i=0; i<n; i++){for(j=0; j<n; j++){if(i!=j){if(a[i].x==a[j].x)//上下是否有垃圾堆{if(a[i].y==a[j].y-1||a[i].y==a[j].y+1)a[i].flag++;}else if(a[i].y==a[j].y)//左右是否有垃圾堆{if(a[i].x==a[j].x-1||a[i].x==a[j].x+1)a[i].flag++;}else{}}}}//确定回收站评分for(i=0; i<n; i++){for(j=0; a[i].flag==4&&j<n; j++){if(i!=j){if(a[i].x==a[j].x+1)//左上左下{if(a[i].y==a[j].y-1||a[i].y==a[j].y+1)a[i].count++;}else if(a[i].x==a[j].x-1)//右上右下{if(a[i].y==a[j].y-1||a[i].y==a[j].y+1)a[i].count++;}else{}}}}//统计不同得分的回收站个数for(i=0; i<n; i++){if(a[i].flag==4){if(a[i].count==0){count[0]++;}else if(a[i].count==1){count[1]++;}else if(a[i].count==2){count[2]++;}else if(a[i].count==3){count[3]++;}else{count[4]++;}}}//输出结果for(i=0; i<5; i++){cout<<count[i];if(i!=4)cout<<endl;}return 0;
}
如果您有问题或者其他解题方法,欢迎在评论区留言o