CSDN周赛第16期-100分满分题解

news2024/12/26 10:50:14

前言

这是时隔两年再参加比赛了,上次参加算法竞赛还是2020年在公司1024活动的时候。当时获得了二等奖(switch套装)和一个快题奖(小米行李箱)。

这次比赛获得了满分,也还不错。题目除了二维积水的问题(bfs+优先队列),其他难度都还好。

本次赛题

比赛地址:https://edu.csdn.net/contest/detail/30

奖惩名单:https://bbs.csdn.net/topics/611149502

T1 鬼画符门莲台争夺战

鬼画符门莲台争夺战! 虽然鬼画符门是一个三流门派但是近期为了改善宗门弟子质量。 特意引进了进化莲台。 部分精英 弟子会自己独占一块区域,或者几个精英弟子一块占领一块区域,他们占领的区域普通弟子不可以再占领,小艺作为普通 弟子想知道自己还能占领哪些地方。莲台区域以1开始,由小到大编号表示。

题解:用一个visi数组记录即可。

AC代码: 

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

vector<int> solution(int n, int m, vector<vector<int>> vec) {
	vector<int> result;
	int visi[1005];
	for (int i = 1; i <= m; i++) visi[i] = 0;
	for (int i = 0; i < n; i++) {
		for (int j = vec[i][0]; j <= vec[i][1]; j++)
		visi[j] = 1;
	}
	for (int i = 1; i <= m; i++) if (visi[i] == 0)
	result.push_back(i);
	return result;
}

int main() {
	int n;
	int m;
	vector<vector<int>> vec;
	std::cin>>n;
	std::cin>>m;
	for (int i = 0; i < n; i++) {
		int a, b;
		cin >> a >> b;
		vector<int> tmp;
		tmp.push_back(a);
		tmp.push_back(b);
		vec.push_back(tmp);
	}
	vector<int> result = solution(n, m,vec);
	int len = result.size();
	cout << len << endl;
	for (int i = 0; i < len; i++) {
		cout << result[i] << " ";
	}
	cout << endl;
	return 0;
}

T2 津津的储蓄计划

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 元钱,津津会预算这个月的花销,并且总能做到实际花销 和预算的相同。 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20% 还 给津津。

因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 100 元或恰好 100 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。 例如 11 月初津津手中还有 83 元, 妈妈给了津津 300 元。津津预计 11 月的花销是 180 元,那么她就会在妈妈那里存 200 元,自己留下 183 元。到了 11 月月末,津津手中会剩下 3 元钱。 津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能 在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这 个月省吃俭用,压缩预算。

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将 津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

题解:每次计算当前的剩余的钱,加上预算(+300),再减去该月的开销。如果小于0,则不够,输出这个月份对应的负数。如果>=0,就把100块整除的部分交给妈妈保管,余数部分自己剩下来接着用。

AC代码: 

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

int main() {
	int t;
	int d = 0, s = 0;
	for (int i = 1; i <= 12; i++) {
		cin >> t;
		d += 300 - t;
		if (d<0) {
			cout << -i << endl;
			return 0;
		}
		if (d/100) {
			s+=d/100;
			d=d%100;
		}
	}
	cout << d+s*120 << endl;
	return 0;
}

T3 多边形的面积

给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的。要求计算多边形的面积。 多边形被放置在一个 X- Y 的卡笛尔平面上,它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整 数(因此多边形的面积也为整数)。

题解:典型的凸包计算,连排序都给咱们排好了,直接用公式即可。

AC代码: 

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

int main() {
	int n;
	cin>>n;
	vector<vector<int>> vec;
	for (int i = 0; i < n; i++) {
		vector<int> tmp;
		int x;
		cin >> x;
		tmp.push_back(x);
		cin >> x;
		tmp.push_back(x);
		vec.push_back(tmp);
	}
	vector<int> tmp = vec[0];
	vec.push_back(tmp);
	int res = 0;
	for (int i = 0; i < n; i++) {
		res += vec[i][0] * vec[i+1][1] - vec[i+1][0] * vec[i][1];
		//cout << i << endl;
		//cout << "res: " << res << endl;
	}
	if (res < 0) res = 0 - res;
	cout << res / 2 << endl;
	return 0;
}

T4 小桥流水人家

在n*m的地图上,存在一个喷水点,如果相邻的位置低于有水的地方,水就能流到相邻的某位置(即该格子需要其上下左 右的格子海拔都比自身高的封闭图形才可以积水)。 已知各个格子的海拔高度,求积水的最大覆盖个格子数。

题解:这个题目是leetcode407 接雨水2。我在之前的博客中有讲解到:lintcode 矩阵问题(最全的面试矩阵问题)_果7的博客-CSDN博客

如果一个位置能找到往外流出的路径,那么这个位置不能接水。

我们可以使用BFS+优先队列来解决这个问题。

1.首先把边界的点加入到队列中,每次出队选择高度最低的出队。

2.记录之前的最大值,如果当前值比最大值小,表示可以装水。

【如果可以漫出,那么之前的最大值一定<=当前值】

【队列里的元素和之前最大的元素是边界,都>=之前的最大值】

PS:使用tuple会超时 (换成了pair 压缩行和列)

AC代码: 

#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 
#include <queue> 
using namespace std;

int main() {
	int n, m;
	vector<vector<int>> vec;
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		vector<int> tmp;
		int x;
		for (int j = 0; j < m; j++) {
			cin >> x;
			tmp.push_back(x);
		}
		vec.push_back(tmp);
	}
	int dir[4][2] = {{-1,0},{1,-0},{0,1},{0,-1}}; 
	if (n < 3 || m < 3) {
		cout << 0 << endl;
		return 0;
	}
	vector<vector<bool>> visi(n, vector<bool>(m, false));
	priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (i == 0 || i == n-1 || j==0 || j == m-1) {
				visi[i][j] = true;
				q.push(make_pair(vec[i][j], i*m+j));
			}
		}
	}
    int res = 0, max_h = 0;
	while(!q.empty()) {
		pair<int, int> t = q.top();
		q.pop();
		int x = t.second / m, y = t.second % m, h = t.first;
		res += max(0, max_h-h);
		max_h = max(max_h, h);
		for (int i = 0; i < 4; i++) {
			int cx = x + dir[i][0], cy = y + dir[i][1];
			if (cx>=0&&cx<n&&cy>=0&&cy<m&&!visi[cx][cy]) {
				visi[cx][cy] = true;
				q.push(make_pair(vec[cx][cy], cx*m+cy));
			}
		}
	}
	cout << res << endl;
	return 0;
}

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

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

相关文章

8Manage:提高项目执行力的策略有哪些?

在项目管理中实施执行战略&#xff0c;将战略目标转化为商业价值的企业将发现取得成功所涉及的大团队——最高管理层、中层管理人员、项目经理和项目团队。 以下是阻碍项目成功执行的六个主要差距&#xff1a; ● 缺少共同的理解 ● 缺乏参与的执行赞助者 ● 与战略目标不一致…

计算机网络—Nginx概述

文章目录nginx负载均衡&#xff1a;例&#xff1a;安装配置nginx————————————————————————————————nginx负载均衡&#xff1a; 请求会打到nginx上面&#xff0c;nginx可以用作负载均衡&#xff0c; 例&#xff1a;一个网站用一台服务器不够&a…

001 软件安装与配置

1、Anaconda安装及使用 1.1 下载地址 Anaconda3-2022.10-Windows-x86_64 1.2 Anaconda创建虚拟环境 下面均在Anaconda终端中输入 查看python版本 python --version1.2.1、Anaconda创建虚拟环境 conda create -n pytorch python3.9conda create 创建虚拟环境命令 -n pytor…

解决vue代码不规范而出现的问题:Eslint修复

当我们刚创建一个vue项目&#xff0c;写代码时候&#xff0c;因为代码写的不规范会出很多问题&#xff0c;报很多错误&#xff0c;除了一个一个去修改他们&#xff0c;还有没有其他办法去解决他们呢&#xff1f; 这里介绍三种办法去统一解决&#xff1a; 方法一&#xff1a;每…

MCU-51:让LED闪烁起来

目录一、LED闪烁1.1 编写代码1.2 延时函数1.3 由0和1控制实现二、LED流水灯2.1 流水灯基础版2.2 移位法实现LED流水灯一、LED闪烁 昨天我们初识单片机&#xff0c;点亮了一个灯开启了我们51单片机的学习之旅。那么今天我们来一步步深入学习。 1.1 编写代码 会了点亮一个灯&a…

嵌入式分享~IO相关1 ##

这里仅总结一下IO控制相关 单片机IO直接驱动继电器 上图是随便找到的两个不同型号的继电器。继电器就是个开关&#xff0c;这个开关是由它内部的线圈控制的&#xff0c;给线圈通电&#xff0c;继电器就吸合&#xff0c;开关就动作了。绝大部分的继电器反面都会有如下图一样的…

win10 git 标准化commit工具commitizen安装教程

1、 安装nodjs https://nodejs.org/en/ 下载最新版本 安装完成后&#xff0c;修改环境变量 默认 nodejs是有的&#xff0c;需要自己添加npm路径 2、安装commitizen 在桌面上右键打开power shell 查看node 和npm的版本&#xff0c;npm最好升级一下 升级命令问题 npm inst…

【HDR】曝光融合(Exposure Fusion)

文章目录0 前言1 算法细节1.1 Naive1.1.1 主要思想1.1.2 权重计算1.1.3 融合1.2 Multi-resolution2 实验3 参考0 前言 在曝光融合&#xff08;Exposure Fusion&#xff09;算法问世之前&#xff0c;多曝光序列合成用于显示的HDR需要两个步骤&#xff0c;第一步是将多张不同曝光…

MySql加密存储的数据,如何模糊搜索?

背景 蔚来被勒索 225 万美元&#xff0c;大量数据遭泄露&#xff01; 根据网络上流传的截图显示&#xff0c;黑客似乎掌握着蔚来内部员工数据 22800 条、车主用户身份证数据 399000 条、用户地址数据 6500000 条、注册用户数据 4850000 条、企业及企业代表联系人数据 10000 条…

dpdk编译

ubuntu网卡信息配置 虚拟机中除去最开始的一块网卡&#xff0c;再另外添加两块网卡&#xff0c;如下图所示 修改Ubuntu20_x64.vmx里面的配置信息 将ethernet0.virtualDev "e1000"里面的e1000更改成vmxnet3,因为e1000只支持网卡单队列&#xff0c;vmxnet3支持网卡对…

5G无线技术基础自学系列 | 5G移动性KPI

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G移动类KPI用来评估NR网络的移动性能&…

29. 如何通过 ABAP 代码给 SAP OData 元数据增添注解

笔者的这篇 SAP UI5 开发教程文章&#xff0c;* SAP UI5 应用开发教程之一百二十九 - 如何给 SAP UI5 SmartField 添加 Value Help 功能&#xff0c;有朋友留言&#xff1a; 你好&#xff0c;请教一个问题&#xff0c;请问如何在odata里面通过annotations添加一个自定义注解&am…

2022年哪些工具适合设计企业产品手册?

产品手册是什么&#xff1f; 产品手册是因特网发展的成果&#xff0c;是一种以移动端为基础进行在线营销的新内容&#xff0c;其中包含了对原有的纸质商品、小册子、促销软文、邀请函等现有促销资料进行数字化的更新。 产品手册是从传统的纸质公司样本书中升级而来的&#xf…

Git 入门

文章目录0. 前言学习目标参考教程链接1. Git概念1.1 什么是Git1.2 Git 的下载1.3 Git三大区域1.4 远程仓库2. Git的使用2.1 图形化操作2.1.1 IDEA图形化操作2.1.2 GitKraken(可选)2.2 命令行操作2.2.1 Git 配置2.2.2 分支命令2.2.3 拉取与推送3. 总结0. 前言 学习目标 了解 G…

面试官:你来说一下Spring IOC容器的创建过程

这篇文章主要讲解 IOC 容器的创建过程&#xff0c;让你对整体有一个全局的认识&#xff0c;文章没有复杂嵌套的 debug 流程&#xff0c;相对来说比较简单。 不 BB&#xff0c;上文章目录。 1. 基础知识 1.1 什么是 Spring IOC &#xff1f; IOC 不是一种技术&#xff0c;只是…

数据结构抽象数据类型的表示和实现

抽象数据类型(Abstract Data Type&#xff0c;ADT)是指一个数学模型以及定义在此数学模型上的一组操作。例如&#xff0c;“整数”是一个抽象数据类型&#xff0c;其数学特性和具体的计算机或语言无关。“抽象”的意义在于强调数据类型的数学特性。抽象数据类型和数据类型实质上…

Halcon常用算子(库函数)整理

目录一. 常规操作类1.1 tuple_length()1.2 tuple_find_first()1.3 tuple_gen_const()二. 机器视觉操作类2.1 read_image()2.2 get_image_size()2.3 intensity()2.4 zoom_image_factor()2.5 median_image()2.6 Gauss_filter()2.7 fft_generic()2.8 convol_fft()2.9 sub_image()2…

大白话给你讲明白数据仓库

数据仓库的本质就是完成从面向业务过程数据的组织管理到面向业务分析数据的组织和管理的转变过程。 数据仓库类比粮食仓库 业务过程数据的组织管理实际上就是由各种业务系统来完成的&#xff0c;比如ERP、CRM、OA等各类业务系统&#xff0c;解决的是基本的业务流程管理。通过…

PS的安装、背景、背景练习、雪碧图、线性渐变、径向渐变、电影卡片练习——06fontbackground

目录 一、PS的安装 二、背景(background-color、background-image、 background-repeat、background-position、background-clip、background-origin、background-size、background-attachment) 三、背景练习(背景重复—导航条的背景颜色是渐变的) 四、背景练习&#xff08…

【数据结构】深度讲解栈、栈的应用举例、栈和递归的实现教你全面认识栈

目录一.栈1.栈的概念及结构2.栈的实现stack.hStack.c二.栈的应用举例1.数制转换2.有效的括号3.迷宫求解三.栈与递归的实现1.栈和递归2.迷宫问题递归实现3.汉诺塔栈实现一.栈 入栈出栈展示&#xff1a; 1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许…