CCF回收站选址-map使用的注意事项(键值为pair)与ccf画图可用同一数据结构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解题思路:
本题为稀疏图,故静态二维,三维数组不易做,我采用结构体保存点坐标,map保存各店是否被访问(有垃圾),其实map作为动态分配空间的三维数组,在map中使用结构体做key值时注意,由于map和set一样都是自动排序(二叉树),故当对结构体进行排序的时候需要进行重载(重新规定结构体的排序方式),格式一定严格,否则会报错。因为结构体中只有x,y,故用pair做map的key值最佳,当时没想到,故直接做了。

#include<iostream>
#include<map>
using namespace std;
typedef struct node{
 int x,y;
 bool operator<(const struct node& other) const{
  if(x!=other.x)
   return x<other.x;
  else
   return y<other.y;
 }
}Node;
Node dian[1002];
map<Node,int > ma;
int main(){
 int n;
 cin>>n;
 int cnt[5]={0};
 for(int i=0;i<n;i++){
  Node tmp;
  cin>>tmp.x>>tmp.y;
  //map无法直接访问键值,所以键值需要另存在dian【N】中
  ma[tmp]=1;
  dian[i].x=tmp.x;
  dian[i].y=tmp.y; 
 }
 for(int i=0;i<n;i++){
  Node tmp1=dian[i];tmp1.x--;
  Node tmp2=dian[i];tmp2.x++;
  Node tmp3=dian[i];tmp3.y--;
  Node tmp4=dian[i];tmp4.y++;
  if(ma[tmp1]&&ma[tmp2]&&ma[tmp3]&&ma[tmp4]){
   tmp1.y--,tmp2.y++,tmp3.x++,tmp4.x--;
   //在上下左右的基础上,将点移到左下,右上,左上,右下进行判断。
   cnt[ma[tmp1]+ma[tmp2]+ma[tmp3]+ma[tmp4]]++;
   
  }
 }
 for(int i=0;i<=4;i++){
  cout<<cnt[i]<<endl;
 }
 return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值