CCF——2019-2回收站选址

问题

在这里插入图片描述

源码

/*
* problem: CCF201912-2 回收站选址
* method: 查找
* date: 2020/05/11
*/
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int N=100005;
typedef struct {
 int x;
 int y;
} point;
point p[N];
int result[5];//回收站各个分数个数
int n;
int cmp(point x,point y) {
 if((x.x<y.x)||(x.x==y.x&&x.y<y.y)) return 1;
 else return 0;
}
int Search(int x,int y) {//查找点是否存在垃圾
 int i,j,flag=0;
 for(i=0; p[i].x<=x; i++) {
  if((x==p[i].x)&&(y==p[i].y)){
   flag=1;
   break;
  }
 }
 return flag;
}
int Judge(point a) {//判断是否建回收站
 int flag=0;
 if(Search(a.x,a.y+1)&&
         Search(a.x,a.y-1)&&
         Search(a.x+1,a.y)&&
         Search(a.x-1,a.y)){
           flag=1;
   }
 return flag;
}
void SetScore(point x) {//设置回收站分数
 int a[2]= {-1,1},b[2]= {-1,1},score=0;
 for(int i=0; i<2; i++) {
  for(int j=0; j<2; j++) {
   if(Search(x.x+a[i],x.y+b[j]))
    score++;
  }
 }
 result[score]++;
}
int main() {
 int i,j,flag=1;
 cin>>n;
 for(i=0; i<n; i++) {
  cin>>p[i].x>>p[i].y;
 }
 sort(p,p+n,cmp);
 for(i=0; i<n; i++) {
  if(Judge(p[i])) SetScore(p[i]);
 }
 for(i=0;i<5;i++)
  cout<<result[i]<<endl;
 return 0;
}
/*
样例1
7
1 2
2 1
0 0
1 1
1 0
2 0
0 1
样例2
2
0 0
-100000 10
样例3
11
9 10
10 10
11 10
12 10
13 10
11 9
11 8
12 9
10 9
10 11
12 11
*/

猜你喜欢

转载自blog.csdn.net/The_Only_God/article/details/106062655