CSP-201912-2-回收站选址

news2024/11/16 10:34:03

CSP-201912-2-回收站选址

【50分思路-暴力枚举】

#include <iostream>    
#include <vector>
#include <algorithm>
using namespace std;
struct trashPoint
{
	int x; 
	int y;
};
vector<trashPoint>trashList;
vector<int>grade(5);
int main() {
	int n, max_x = -1, max_y = -1, min_x = 999, min_y = 999;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		trashPoint t;
		cin >> t.x >> t.y;
		max_x = max(max_x, t.x), max_y = max(max_y, t.y);
		min_x = min(min_x, t.x), min_y = min(min_y, t.y);
		trashList.push_back(t);
	}
	int deltaX = max_x - min_x, deltaY = max_y - min_y; 
	int moveX = min_x, moveY = min_y;
	vector<vector<bool>>tashMatrix(deltaX + 1, vector<bool>(deltaY + 1));
	for (const auto& it : trashList)
	{
		tashMatrix[it.x - moveX][it.y - moveY] = 1;
	}

	for (int i = 1; i < deltaX; i++)
	{
		for (int j = 1; j < deltaY; j++)
		{
			int myGrade = 0;
			if (tashMatrix[i][j] && tashMatrix[i][j + 1] && tashMatrix[i][j - 1] && tashMatrix[i + 1][j] && tashMatrix[i - 1][j])
			{
				if (tashMatrix[i - 1][j - 1])myGrade++;
				if (tashMatrix[i + 1][j + 1])myGrade++;
				if (tashMatrix[i - 1][j + 1])myGrade++;
				if (tashMatrix[i + 1][j - 1])myGrade++;
				grade[myGrade]++;
			}
		}
	}

	for (const auto& it : grade) {
		cout << it << endl;
	}
    return 0;
}

【100分思路】

  1. 读取数据:初始化一个二维向量 coords 存储每个垃圾点的坐标。对于每个垃圾点,代码读取其横纵坐标 (x, y) 并存储在 coords 中。

  2. 计算相邻点数量:对于每个垃圾点,代码计算其直接相邻的垃圾点数量(即上下左右四个方向)。这是通过比较每个点与其他所有点的坐标来完成的,如果两个点在水平或垂直方向上相邻(差一个单位距离),则它们被认为是相邻的。对于每个点,它的相邻垃圾点的数量被记录在 adjacentCount 向量中。

  3. 评分回收站选址:根据题目的要求,一个地点适合建立回收站的条件是它有四个直接相邻的垃圾点。对于每个符合这一条件的垃圾点,代码会进一步检查其四个对角线方向上的垃圾点的数量。对角线上的垃圾点数量将决定该地点的评分,评分范围是 0 到 4。每个可能的评分值都有一个对应的计数,记录在 diagonalCounts 向量中。

  4. 输出结果:最后,代码输出每个评分值的回收站选址数量。对于每个从 0 到 4 的评分值,它打印出相应的计数值,这些值表示评分为该值的合适回收站选址的数量。

完整代码

#include<iostream> 
#include<vector> 
using namespace std;

int main() {
    int n; 
    cin >> n; 
    vector<vector<long long>> coords(n, vector<long long>(2)); // 二维向量存储坐标
    vector<int> adjacentCount(n, 0); // 创建一个向量存储每个点相邻点的数量
    vector<int> diagonalCounts(5, 0); // 创建一个向量存储对角线上点的数量分布

    // 读取坐标数据
    for (int i = 0; i < n; i++) {
        cin >> coords[i][0] >> coords[i][1]; // 读取每个坐标
    }

    // 计算每个点的相邻点数量
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            // 检查是否为相邻点(水平或垂直相邻)
            if ((coords[i][0] == coords[j][0] && abs(coords[i][1] - coords[j][1]) == 1) ||
                (coords[i][1] == coords[j][1] && abs(coords[i][0] - coords[j][0]) == 1)) {
                adjacentCount[i]++;
                adjacentCount[j]++;
            }
        }
    }

    // 统计每个点对角线上的点的数量
    for (int i = 0; i < n; i++) {
        int diagCount = 0; // 对角线上的点数量
        if (adjacentCount[i] == 4) { // 如果一个点有4个相邻点,则检查其对角线上的点
            for (int j = 0; j < n; j++) {
                // 检查是否为对角线上的点
                if (abs(coords[i][0] - coords[j][0]) == 1 && abs(coords[i][1] - coords[j][1]) == 1) {
                    diagCount++;
                }
            }
            diagonalCounts[diagCount]++; // 根据对角线上的点的数量增加对应的计数
        }
    }

    for (int i = 0; i <= 4; i++) {
        cout << diagonalCounts[i] << endl; 
    }

    return 0; // 程序结束
}

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1480864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL:使用聚合函数查询

提醒&#xff1a; 设定下面的语句是在数据库名为 db_book里执行的。 创建t_grade表 USE db_book; CREATE TABLE t_grade(id INT,stuName VARCHAR(20),course VARCHAR(40),score INT );为t_grade表里添加多条数据 INSERT INTO t_grade(id,stuName,course,score)VALUES(1,测试0…

1.QT简介(介绍、安装,项目创建等)

1. QT介绍 Qt&#xff08;官方发音 [kju:t]&#xff09;是一个跨平台的C开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序 Qt 是纯 C 开发的&#xff0c;正常情况下需要先学习C语言、然后在学习C然后才能使用…

JS reduce() 附使用详解

reduce() 方法对数组中的每个元素执行自己提供的回调函数(依次执行)&#xff0c;将其结果汇总为单个返回值。 文章目录 前言一、reduce()是什么&#xff1f;二、使用步骤1.语法2.实例解析 initialValue 参数3.注意事项4.应用情况 三、总结 前言 reduce()方法可以搞定的东西特别…

使用MindOpt时常见的报错,以及对应的解决方法

本篇描述的license问题均为云鉴权的方式 执行 mindopt -c检查许可证的配置&#xff08;license文件&#xff09; 许可证过期 示例&#xff1a; 解决方法&#xff1a; 在控制台中续费即可 并发不够&#xff08;409&#xff09;&#xff0c;以及两个 WARN提示 示例&#xff1…

【前端素材】推荐优质在线高端蜂蜜商城电商网页Beejar平台模板(附源码)

一、需求分析 1、系统定义 在线高端蜂蜜商城是指一个专门销售高品质、高端蜂蜜产品的电子商务平台。这种商城致力于向消费者提供各种经过精心挑选、具有高营养价值和健康功效的蜂蜜产品。 2、功能需求 在线高端蜂蜜商城是指一个专门销售高品质、高端蜂蜜产品的电子商务平台…

没有项目经历,该如何写简历?

没有项目经历&#xff0c;我该如何写简历 一、前言二、挖掘自己三、看现成的项目经验&#xff0c;转化成自己的语言1、硬件方面2、软件方面 四、最后 一、前言 相信有很多刚出来找工作的人会遇到这种情况&#xff0c;因为自身没有项目经历&#xff0c;投了很多的简历都石沉大海…

小甲鱼Python07 函数初级

一、创建和调用函数 pass语句表示一个空的代码块&#xff0c;我们经常先写好函数&#xff0c;pass占一个坑&#xff0c;等规划好之后再来填坑。 函数也是可以指定参数的&#xff0c;我们会把参数传进去用来替代形参。 在Python里如果想要返回值&#xff0c;不需要指定函数的返…

Redis 【1】—— 安装 与 配置

Redis 【1】—— 安装 与 配置 一、安装 与 配置&#xff08;一&#xff09;使用 yum 安装&#xff08;二&#xff09;创建符号链接1. 软链接2. 相关指令 &#xff08;三&#xff09;修改配置文件&#xff08;四&#xff09;Redis 的启停 一、安装 与 配置 &#xff08;一&…

【leetcode】反转链表

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 方法1 .将箭头方向逆转方法2. 点击查看题目 方法1 .将箭头方向逆转 思路&#xff1a; n1,n2,n3分别指…

Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版

Topaz Video AI是一款革命性的视频智能处理软件&#xff0c;它利用先进的机器学习和人工智能技术&#xff0c;为视频创作者提供了前所未有的视频增强和修复功能。无论您是专业视频编辑师、摄影师&#xff0c;还是热爱视频创作的爱好者&#xff0c;Topaz Video AI都能帮助您轻松…

大数据分析案例-基于SVM支持向量机算法构建手机价格分类预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

React富文本编辑器开发(三)

现在我们的编辑器显示的内容很单一&#xff0c;这自然不是我们的目标&#xff0c;让呈现的内容多元化是我们的追求。这就需要让编辑器能够接收多元素的定义。从初始数据的定义我们可以推断数据的格式远不止一种&#xff0c;那么其它类型的数据如何定义及呈现的呢&#xff0c;我…

【 C++ 】智能指针

1、内存泄漏 什么是内存泄漏&#xff0c;内存泄漏的危害 什么是内存泄漏&#xff1a; 内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失&#xff0c;而是应用程序分配某段内存后&#xff0c;因为设计错误&#xff0c…

操作系统导论

操作系统的概念&#xff1a; 操作系统是管理计算机硬件的程序&#xff0c;它还为应用程序提供基础&#xff0c;并且充当计算机硬件和计算机用户之间的中介。 操作系统做什么&#xff1a; 计算机系统可以大致分为四个部分&#xff1a;硬件&#xff0c;操作系统&#xff0c;系…

kafka查看数据_Kafka 数据积压情况查看

由于消息消费速度处理慢或是消费端故障会导致数据产生积压。 那怎么查看数据积压量呢&#xff1f; Consumer-Groups管理&#xff1b; 在Kafka 的bin目录下提供了 kafka-consumer-groups.sh 脚本。此脚本用于管理消费情况。 查询消费者组 $KAFKA_DIR/bin/kafka-consumer-groups…

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

深入理解计算机系统笔记

1.1 嵌套的数组 当我们创建数组的数组时&#xff0c;数组分配和引用的一般原则也是成立的。 例如&#xff0c;声明 int A[5][3]; 等价于下面的声明 typedef int row3_t[3]; row3_t A[5] 要访问多维数组的元素&#xff0c;编译器会以数组起始为基地址&#xff0c; (可能需…

教你快速认识Java中的继承和多态

目录 继承 继承的概念 继承的语法 父类成员访问 在子类方法中或者通过子类对象访问父类成员变量时&#xff1a; 在子类方法中或者通过子类对象访问父类成员方法时&#xff1a; super关键字 子类构造方法&#xff1a; 代码块执行顺序: 多态 多态的实现条件 重写 重…

MySql安全加固:配置不同用户不同账号禁止使用旧密码禁止MySql进程管理员权限

MySql安全加固&#xff1a;配置不同用户不同账号&禁止使用旧密码&禁止MySql进程管理员权限 1.1 检查是否配置不同用户不同账号1.2 检查是否禁止使用旧密码1.3 禁止MySql进程管理员权限 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496…

shell自定义日志输出函数log

Background 在编写比较复杂的脚本时&#xff0c;需要输出相关日志信息&#xff0c;方便知悉脚本的执行情况以及问题的排查。 源码 log.sh # 自定义日志函数 function log(){if [[ $1 "i" || $1 "info" ]]; thenecho -ne "\033[1;34mINFO: \033[0m&…