CSDN 编程竞赛十六期题解

竞赛总览

CSDN编程竞赛十六期:比赛详情 (csdn.net)

本次竞赛第四题给的样例与题目描述不符,体验较差。

竞赛题解

题目1、鬼画符门莲台争夺战

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

首先扫描一遍所有区域,使用数组记录被占领的区域。

之后再次扫描所有区域,如果未被占领则记录下来。扫描完成之后即可获得未被占领区域的数量。

题目2、津津的储蓄计划

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了 11 月月末,津津手中会剩下3元钱。 津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

NOIP上古原题。难度和题目1差不多,有手就行系列。

题目3、多边形的面积

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

洛谷原题。多边形的面积 - 洛谷

题目4、小桥流水人家

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

广度优先搜索。

这道题本来是一道中等难度的题,但是由于竞赛系统的坑,我还真不太敢下手,直接纯骗分过的。

主要有几处问题:

1、竞赛系统中给出的样例没有喷水点的坐标,但是给的代码模板里有读入的相关代码。

2、坐标的x方向没有什么问题,但是y的方向可能从上到下,也可能从下到上。

3、未提到边界是否可以积水。

之前玩过一个steam上的游戏,点一个格子就可以将格子降低,然后最上面的水就可以流下来,但是这个游戏中边界是不可以积水的。

从这道题目给的样例数据上看,似乎边界能积水,否则的话多种情况都无法得到输出给定的格子数目。

可以搜索一下Spring Falls这款游戏,B站上还有通关视频,不妨看看视频感受一下。

这道题的思路也就比较明晰了:

1、水往低处流(指明起始搜索方向)。

2、如果能存住水,流过的位置就可以注满水,这个条件是四周的高度均比这个点高。

3、存住水的点被注满水,高度可以更新为四周高度的最小值。

4、水流向和当前注水槽高度一致的其它位置(继续向外搜索)。

第二步中,如果四周的某个高度比当前位置矮或者和当前位置持平,则需要判定它是否能被更外层围住,这里再写一个验证函数即可。

你可能感兴趣的:(CSDN,竞赛题解,算法,c++)