题目思路

这道题是一道非常典型的CCF-CSP认证前两题的题目,主要考察对二维坐标的标记和对标记的查询。

把输入的点全部利用数组存储起来,然后对所有的点进行位置标记。接着,我们去按顺序访问所有有垃圾的点(x,y),对于每个点,我们都有以下操作:

  • 根据该点判断该点是否适合作为垃圾点。如果合适就进行下个操作;否则,访问下一个点。
  • 根据四个对角位置存在多少处垃圾对该回收站点进行评分,接着该分数的站点数加一。

对于坐标点的存储,可以定义 PointPointPoint 结构体,也可以直接用C++ STL提供的 pair<int,int>pair<int, int>pair<int,int> 进行存储。下面代码中对于两种方法都有涉及,其实只用一种就够了,但是如果只用定义 PointPointPoint 结构体的方法的话,需要重载==运算符;

对于点的标记,可以考虑用C++ STL提供 setsetset 或者 mapmapmap,也可直接用数组顺序存储标记,但是每次查找都需要用 O(n)O(n)O(n) 的时间复杂度去遍历。

坑点:

  • 虽然点的个数不多,但是单个点的坐标可以到 10910^9109,所以不能直接开二维数组来进行地图标记。

代码如下

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 1e3 + 10;
struct Point {int x, y;
} p[maxn];
set<pair<int, int> > vis;int n, score[10];/*** 判断点(x, y)是否适合作为回收站* 如果适合,就返回1;否则返回0*/
int isSuit(int x, int y) {if (!vis.count(pair<int , int>(x + 1, y))) return 0; if (!vis.count(pair<int , int>(x - 1, y))) return 0;if (!vis.count(pair<int , int>(x, y + 1))) return 0;if (!vis.count(pair<int , int>(x, y - 1))) return 0;return 1;
}
/*** 计算点(x, y)作为回收站可以得到的评分* 返回评分*/
int getScore(int x, int y) {int res = 0;if (vis.count(pair<int , int>(x + 1, y + 1))) res++;if (vis.count(pair<int , int>(x + 1, y - 1))) res++;if (vis.count(pair<int , int>(x - 1, y + 1))) res++;if (vis.count(pair<int , int>(x - 1, y - 1))) res++;return res;
}int main()
{//freopen("2.txt", "r", stdin);scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d %d", &p[i].x, &p[i].y);vis.insert(pair<int, int>(p[i].x, p[i].y));}for (int i = 1; i <= n; i++) {if (isSuit(p[i].x, p[i].y)) {score[getScore(p[i].x, p[i].y)]++;}}for (int i = 0; i <= 4; i++) printf("%d\n", score[i]);return 0;
}

ccf-csp #201912-2 回收站选址相关推荐

  1. 第18次csp认证 201912-2 回收站选址(C++)

    题目 分析 每一个垃圾堆放处都可能是回收站,所以两轮循环,找出所有可以成为回收站的坐标. 再两轮循环,确定所有回收站的得分 最后输出每种得分的回收站个数 AC代码 #include <iostr ...

  2. CSP 201912-2 回收站选址 python实现+详解

    试题 代码 # 读入点的个数 n = int(input())# 创建字典,键为点的坐标,值为true,存放所有点 dict = {} for i in range(n):x, y = [int(m) ...

  3. #CSP 201912-2 回收站选址(C语言)(100分)

    题目 开学了,可是校园里堆积了不少垃圾杂物. 热心的同学们纷纷自发前来清理,为学校注入正能量~ 通过无人机航拍我们已经知晓了n处尚待清理的垃圾位置,其中第i(1<=i<=n)处的坐标为(x ...

  4. CCF CSP认证考试题解目录

    由于本人的书籍<算法详解(C++11 语言描述)>已经出版,为了降低题解的维护难度,有关CCF CSP考试的所有题解的更新将全部在书籍的配套仓库进行,CSDN博客中不再进行任何题解的更新. ...

  5. CCF CSP 历年题解(C/C++)【截至2019年】

    本人水平有限  目前只能做前两题  后面的随机可能会有  就脸厚的先写一个吧 (捂脸) 第一题 一般都是小模拟题  细心一点 注意一下格式之类的很容易就出来的 第二题 就是一道大模拟题 耐心一点 适当 ...

  6. leetcode力扣、PAT、CCF CSP历年真题C/C++满分答案 精心整理合集

    持续更新中~ 推荐算法类学习书籍:<算法笔记>胡凡.曾磊 著 尽心尽力肝出来的合集,如果有幸帮助到你的话,不要忘记给我点个赞哈哈哈~ CSP历年真题C/C++满分答案目录 没有备注的都是满 ...

  7. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  8. 计算机能力挑战赛_蓝桥杯、PAT、CCF CSP、团体程序设计天梯赛、传智杯、计算机能力挑战赛、软考等大学生编程比赛/考试介绍...

    介绍7个适合普通大学生参加的编程比赛/考试(注:有的比赛如蓝桥杯有多种赛别,本文仅介绍其中的程序设计/编程比赛). 编程入门书籍推荐<算法笔记>,内容详细易懂,对新手非常友好,描述语言为C ...

  9. CCF201912-2 回收站选址

    试题编号: 201912-2 试题名称: 回收站选址 时间限制: 1.0s 内存限制: 512.0MB 问题描述:   解题思路: 因为坐标范围很大,但是点的数据不多,所以用二维数组来存储坐标这个图是 ...

  10. CCF201912-2 回收站选址(100分)【序列处理】

    回收站选址 [提示] 本题中所涉及的坐标皆为整数,且保证输入的坐标两两不同. 问题链接:CCF201912-2 回收站选址 问题分析:     坐标值范围比较大,而且坐标有可能是负数,难以用矩阵来存储 ...

最新文章

  1. Android开发--Wifi的操作
  2. Python进行数据分析—可视化之seaborn
  3. 【C++深度剖析教程1】C++中的经典问题解析-c++中的对象的构造顺序与析构顺序
  4. kali修改root密码
  5. phpstudy命令行中数据表插入中文显示不了的问题
  6. React Mixin
  7. 【身份牌识别】基于matlab GUI模板匹配身份牌识别【含Matlab源码 1354期】
  8. c语言求信源的信息熵,第二章-信源与信息熵(三)
  9. vscode快速格式化代码
  10. 中国石油大学《测井解释与生产测井》第三阶段在线作业
  11. 上海二手房价数据分析
  12. 车牌识别、证件识别、汽车VIN识别在汽车服务门店中的实际应用
  13. 也说类别Category
  14. 学习《python模拟测试机器人》笔记2
  15. MATLAB实现数字滤波器的频带变换
  16. tp6框架结合阿里短信接口发送短信并记录redis
  17. 那些有趣的网站系列(四)
  18. 清华最新发布的毕业生去向,够卷!
  19. AI人工智能识别技术如何助力构建风险监测预警系统?
  20. 【雅思备考】听说读写攻略 | 雅思核心词汇之科技类

热门文章

  1. 一致性算法 - Raft
  2. 【Win32汇编】__declspec(naked)裸函数
  3. VMprotect简介
  4. 私有句柄表(内核对象,并非用户对象),全局句柄表
  5. 2020-11-12(内容提供者,内容解析者,内容观察者)
  6. 分别用顺序表和链表实现队列
  7. B - Bone Collector (01背包)
  8. Linux文件系统目录结构
  9. MySQL之alter和upate
  10. Dubbo框架设计原理