题目思路

这道题是一道非常典型的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. python代码雨代码复制_python实现跨excel sheet复制代码实例
  2. 为网站文字前面添加图标 在线调用 Font Awesome 字体icon小图标 美化网站
  3. 如何基于多线程队列简单实现mq
  4. 如何用JS实现音乐播放、暂停
  5. 怎样将Embedding融入传统机器学习框架?
  6. 冲浪科技获Ventech China数百万美元天使轮融资,发力自动驾驶行业
  7. 【Spring】Spring boot 中文乱码
  8. 算法专题(一)1.1 希尔排序,快速排序
  9. 如何在C# 中使用WMI 实现远程查询和共享
  10. 《CCIE路由和交换认证考试指南(第5版) (第2卷)》——1.6节理解与记忆
  11. python post请求实例_Python3模拟curl发送post请求操作示例
  12. navicat 简体中文破解版
  13. 极通EWEBS 3.0抢“鲜”发版
  14. WPS设置标题行固定
  15. Linux 返回根目录
  16. 使用ret2libc攻击方法绕过数据执行保护
  17. 采用Cordic算法求解atan反正切角度
  18. 一个无边界区块链世界DIOT平行链数字物联网致力打造跨境电商 跨境支付 跨境地产
  19. ps 画中间透明的边框图形
  20. 配置rtools 4.0 https://cran.r-project.org/bin/windows/Rtools/

热门文章

  1. Gosper 的序列 循环检测
  2. 【攻防世界005】parallel-comparator-200
  3. Intel VT学习笔记(六)—— VM-Exit Handler
  4. MySQL默认值(DEFAULT)
  5. 5、删除用户(DROP/DELETE USER)
  6. 17、MySQL创建,执行事件
  7. 1.2 内置异常类,异常方法
  8. Acwing第 28 场周赛【完结】
  9. PAT乙级全套超详细题解【建议收藏】
  10. Linux之tcpdump