Python解题 - CSDN周赛第16期 - 流水还是积水?

news2024/12/29 1:45:15

问哥在最后30分钟才有空进入比赛,发现满分选手只有两位,就知道大家又遇到坑了。。。其中两道题的数据都多少有点问题。不得不佩服那两位在这种情况下还能拿满分的选手,等到他们分享解题报告后,问哥再来更新代码吧。


第一题:鬼画符门莲台争夺战

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

输入:第一行两个整数n、m,分别代表弟子数量和莲台数量(1到m),下面n行表示每个弟子占领的莲台左、右莲台编号。

输出:如果无可用莲台,输出0,否则,输出可用莲台数量,然后在第二行输出莲台编号。

分析

不记得示例了,不过不影响,反正也是水题。题意翻译过来就是,有连续整数组成的集合(1到m),删除n次数据,问剩下元素数量及内容。使用python的集合操作即可。

参考代码

n, m = map(int, input().strip().split())
total = set(range(1,m+1))
for _ in range(n):
    l, r = map(int, input().strip().split())
    total.difference_update(set(range(l, r+1)))
if len(total)==0:
    print(0)
else:
    print(len(total))
    print(*total)

第二题:津津的储蓄计划

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

示例1示例2
输入290
230
280
200
300
170
340
50 
90 
80 
200
60 
290 
230 
280 
200 
300 
170 
330 
50 
90 
80 
200 
60 
输出-71580

分析

本来没啥好分析的,这不就是初中数学应用题嘛,按照题目描述的一句句写代码即可,而且原题在此。但是——上次问哥还说CSDN的数据测试可能不如洛谷的严格,这么快就被打脸——同样的代码在洛谷顺利pass,在CSDN的周赛却只能通过一半的测试数据。思考许久仍找不到到底miss在哪里,等到满分同学分享代码后问哥再来更新吧。

参考代码

budgets = [int(input()) for _ in range(12)]
start = saving = 0
for i in range(12):
    start += 300 - budgets[i]
    if start < 0:
        print(0-i-1)
        break
    else:
        saving += start//100
        start %= 100
else:
    print(saving*120+start)

第三题:多边形的面积

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

分析

纯纯的数学题,属于那种“知道公式很快就能写出来”的题目,和代码基本没什么关系。

n个顶点组成的多边形面积计算公式为:

\frac{abs(x_{1}*y_{2}-y_{1}*x_{2}+x_{2}*y_{3}-y_{2}*x_{3}+...+x_{n}*y_{1}-y_{n}*x_{1})}{2}

由于横纵坐标交叉相乘再相减,又可以形象地称之为“鞋带公式”,保证你看了就记住了。

参考代码

n = int(input())
vector = []
for _ in range(n):
    vector.append([int(i) for i in input().strip().split()])

a = sum(vector[i][0]*vector[i+1][1] for i in range(n-1))
b = sum(vector[i][1]*vector[i+1][0] for i in range(n-1))
a += vector[0][1]*vector[-1][0]
b += vector[0][0]*vector[-1][1]
print(abs(a-b)//2)

第四题:小桥流水人家

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

示例:

示例1示例2
输入

3 6

3 3 4 4 4 2

3 1 3 2 1 4

7 3 1 6 4 1

3 4

3 3 4 5

3 1 2 2

9 3 1 6

输出51

分析

本期最坑的题目来了。其实这也是每日一练里出现过的题目,但是,题目组做了点修改(问哥认为是很自以为是的修改),删去了喷水点的坐标,但却并未修改题干,也未增加对示例的说明,导致大家对题意各种猜测。问哥先给出之前每日一练中使用的解法,然后再讨论一下题目组的修改意图。

在修改之前,这是一道经典的深搜题,大家在其他网站或多或少应该都见过,就是每天或每过一段时间出水点(或其他什么东东)就会向上下左右四个方向(也有八个方向)蔓延,然后问一段时间后符合条件的坐标点有多少。只要从出水点的位置分别向四个方向深度搜索,如果符合条件(①未出界;②未被水覆盖;③海拔比出水点低),则将这个位置标记为被水覆盖的点,然后继续以这个点为中心向上下左右递归搜索。然后,最后统计一下有哪些位置被水覆盖即可。

参考代码

n, m, x, y = map(int, input().strip().split())
vector = []
for _ in range(n):
    vector.append([int(i) for i in input().strip().split()])

def dfs(x,y,center):
    for a,b in co:
        x0, y0 = x, y
        x0 += a
        y0 += b
        if 0 <= x0 < n and 0 <= y0 < m and water[x0][y0] = =0 and vector[x0][y0] < center:
            water[x0][y0] = 1
            dfs(x0,y0,center)
water = [[0]*m for i in range(n)]
water[x-1][y-1] = 1
co = ((0,-1),(0,1),(1,0),(-1,0))
center = vector[x-1][y-1]
dfs(x-1,y-1,center)
result = sum(sum(i) for i in water)
print(result)

但是,这只是针对之前每日一练中出现的、有明确指出出水点的位置的情况。而出现在本周赛的题目里是没有给出出水点位置的,那出题组是什么意图呢?由于题目说得并不清楚,对示例也并未加以说明,所以问哥猜测有以下三点:

  1. 出水点默认在中心位置(可能较小)
  2. 默认四周水会流走,不会形成积水(可能性大)
  3. 结果里被水覆盖的是积水体积,而不是格子个数(可能性大)

根据第一个猜测,如果出水点位置在中心的话,两个示例就都能满足了(示例一中出水点是第二行第三列,海拔3,示例二中出水点是第二行第二列,海拔1)。

通过上面的代码计算,可以得出被水覆盖的位置如上图中橘色点的位置。但是,这只是猜测,据此修改的代码也只能通过一半的测试数据(运气),所以这个猜测并不十分靠谱,而且如果出题人真的是因为这个理由而把出水点的位置去除的话,估计会被骂到死。

而根据第二个猜测,既然题目问的是积水,那我们就想想,是不是被水“流过”的格子不算“积水”(文字游戏)?这样一来,默认外面一圈存在最低点,所以不管出水点在哪儿,只要和外面接通了,水就都流走了,而剩下的就都是能够形成积水的洼地?如下图所示,不管出水点在哪,最终都只有图中的橘点形成积水。

但是,如果这样理解的话,示例一的答案就不正确了。

所以,问哥不得不在此再加上第三个猜测,那就是要求的并不是格子的个数,而是覆盖积水的总体积。比如上图中,第一个积水点(橘点)的高度是1,和旁边最低的高度3(可以形成积水的高度)的落差是2,右边两个积水点的高度是2和1,和3的落差分别是1和2,这样一来,2+1+2=5,答案就对上了。而同样的猜测也适用于右边示例二,积水点的高度是1,和右侧可以形成积水的最低高度2的落差为1,所以答案是1。

那,这是不是正确的猜测呢?鬼知道!

等问哥胡乱猜测到这里的时候,时间已经所剩不多,再也没心情调试了,索性点了交卷。这已经和写代码无关了——连需求是啥都没搞清楚,乱试是没有意义的。等着看满分大佬的分享,再回来更新吧。

问哥忍不住吐槽——虽然官方未必会看到,看到了也未必会改——既然改了题目,就要好好说明题意,避免错误解读,还要多找几个人评测一下,看看会不会产生误解。大家来练的是解题思路和代码的熟练度,而不是来考中文的阅读理解。还需要去猜测出题人的意图,这样的比赛让人觉得毫无意义。

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

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

相关文章

java Lambda概念 通过实现线程简单体验一下Lambda表达式

首先 我们先对函数式编程 做一个简单的描述 在数学中 函数是 有输入量和输出量的一套计算方案 也就对应程序中的 拿数据 做操作 java 是一个面向对象编程的语言 他强调的做什么都要通过对象完成 而在函数式中就要尽可能摆脱这种思维模式 函数式只在乎做什么 并不强调用什么形…

程序员能纯靠技术渡过中年危机吗?

首先说答案&#xff0c;能&#xff01;程序员可以靠技术渡过中年危机&#xff0c;但是要转变线性思维。 先说说个人情况&#xff0c;80后&#xff0c;从事电机控制软件开发十余年&#xff0c;属于制造业&#xff0c;算嵌入式的一个小分支&#xff0c;相关的细分行业包括电动汽…

元学习和机器学习的对比

目录引言机器学习元学习什么是元学习元学习的流程学习学习函数评价学习函数好坏迭代优化整体框架元学习和机器学习的对比定义的区别数据集划分的区别损失函数的区别两者之间的共通之处总结引言 本篇博客是李宏毅老师元学习课程的笔记。 深度学习大部分时间在调参数。在业界通…

71. SAP ABAP 报表屏幕输入字段如何实现联动效果

有朋友向我咨询,SAP ABAP 报表输入字段,如何实现联动效果? 所谓联动效果,如下图所示,我们有三个输入框,类型都是 Checkbox: 激活缓存使用共享内存使用二级缓存默认情况下,使用共享内存和使用二级缓存这两个 Checkbox 处于禁用状态。只有当我们选中 激活缓存 时,这两个…

【lssvm回归预测】基于灰狼算法优化最小支持向量机GWO-LSSVM数据预测模型含Matlab源码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

[备战蓝桥杯系列]蓝桥杯总结部分经典题题解分享

文章目录题目1:空间题目2:数字三角形题目3:刷题统计题目4:阶乘约数题目5:回路计数本篇文章中的题解是我所写的代码且都是可以运行通过的, 总结出的一篇相对来说比较清晰的个人题解, 希望要备战蓝桥杯的小伙伴能够看到最后(由于本人要参加的是Java组, 所以后面的题解基本都是使用…

Vant 4 - 新版本发布!有赞出品的 Vue3 移动端 UI 组件库,轻量好用,免费开源

主流的 Vue 移动端组件库 Vant 迎来了第四个大版本的更新&#xff0c;用来开发手机端项目非常好用&#xff0c;强烈推荐给各位开发者使用。 关于 Vant 4 Vant 是一个轻量、可靠的移动端组件库&#xff0c;基于 Vue3&#xff0c;由有赞开发并且维护。有赞作为早期以 H5 商城、…

Mysql Yum安装

步骤一&#xff1a;首先下载mysql的yum源配置 1 | wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 步骤二&#xff1a;安装mysql的yum源 1 | yum -y install mysql57-community-release-el7-11.noarch.rpm 步骤三&#xff1a;yum方式安装mysql …

嵌入式开发环境搭建9步走(ubuntu)

学习嵌入式的同学们注意喽!我想你首先得搭建一个开发环境吧!否则你还能咋玩的起来?所以今天说一下嵌入式开发环境搭建。当然嵌入式系统有很多种&#xff0c;今天在这里以主流的ubuntu为例。 一、选择安装ubuntu8.10版本 【这版本可能有点老&#xff0c;这是曹忠明老师几年前写…

哈希的应用:海量数据处理

文章目录前言什么是海量数据处理位图的应用题目1题目2题目3布隆过滤器的应用问题1问题2哈希切割的应用题目1问题2前言 如果只需要知道某些元素是否存在于集合中&#xff0c;当数据量达到一定程度时&#xff08;以亿级起步&#xff09;&#xff0c;搜索树、哈希表等数据结构会因…

你评论,我赠书~【TFS-CLUB社区 第10期赠书活动】〖uni-app跨平台开发与应用从入门到实践〗等你来拿,参与评论,即可有机获得

文章目录❤️‍&#x1f525; 赠书活动 - 《uni-app跨平台开发与应用从入门到实践》❤️‍&#x1f525; 编辑推荐❤️‍&#x1f525; 抽奖方式与截止时间❤️‍&#x1f525; 赠书活动 → 获奖名单❤️‍&#x1f525; 赠书活动 - 《uni-app跨平台开发与应用从入门到实践》 内…

三子棋超详细解说,人机大战,PVP玩家对战

&#x1f992;这个游戏相信大家都听过&#xff0c;三子棋&#xff0c;不就是井字棋吗&#xff1f;那么今天我们就来亲手制作一个三子棋游戏&#xff0c;实现人机“智能”大战以及玩家PVP对战。 &#x1f412;三子棋的基本功能构思 &#x1f992;面对一个较大的游戏程序我们要做…

全套Python学习路线,快速上手!

最近几年随着互联网的发展学习Python人越来越多&#xff0c;Python的初学者总希望能够得到一份Python学习路线图&#xff0c;小编经过多方面汇总&#xff0c;总结出比较全套Python学习路线&#xff0c;快速上手。对于一个零基础的想学习python的朋友来说&#xff0c;学习方法很…

JavaWeb框架(二):Servlet组件入门

Servlet入门 MVC实战项目 仓储管理系统Servlet 入门DemoServlet 执行流程、生命周期执行流程生命周期Servlet API介绍Servlet体系结构Servlet urlPattern配置Servlet&#xff1a;请求与响应Request&#xff1a;请求请求的构成请求API方法来获取对应的值:请求参数的获取方式请求…

月入5000+|技术博客长期搬砖项目

大家好&#xff0c;我是钱der。 这篇文章介绍一个我之前研究过一段时间的小众技术人员的副业项目&#xff0c;做的好一天有几百收入&#xff0c;做的差一天也能有几十收入&#xff0c;这个项目只需要前期的积累&#xff0c;后期坐等收钱就可以。这个项目有一定的门槛&#xff…

动态规划DP

动态规划 DP3. 动态规划 DP什么是动态规划动态规划和其他算法的区别解题方法解题步骤[509. 斐波那契数](https://leetcode.cn/problems/fibonacci-number/) (easy)暴力递归递归 记忆体动态规划滚动数组优化动态规划 降维[62. 不同路径](https://leetcode.cn/problems/unique-…

[vue应用实践]:vue3使用自定义指令定义拖拽方法

总结一些日常需要用到的一些api&#xff0c;也是在一些面试中会经常出现的题目&#xff0c;今天分享的是vue3中使用自定义指令封装拖拽方法&#xff0c; 同时文章也被收录到我的《JS基础》专栏中&#xff0c;欢迎大家点击收藏加关注。 vue指令 vue中有内置的一些指令供我们使用…

信贷产品年终总结之贷中行为分析

番茄知识星球平台上周开始推出信贷业务年终总结的系列文章&#xff0c;首篇主题为客户特征画像&#xff0c;并已在平台发布&#xff08;12月13日&#xff09;&#xff0c;感兴趣童鞋可前翻查阅。作为系列专题的续集&#xff0c;本篇将围绕信贷存量数据为大家带来第二个主题“贷…

多维数据库概念与理解

如今多维数据库已经越来越普及&#xff0c;不少公司开始研发属于自己公司的基于多维开发的作业平台。利用多维的数据直观化、效率高等优势&#xff0c;直接打开数据分析的大门。 有人好奇什么是多维数据库&#xff1f;下面我和大家一一探讨 其实多维数据库是指将数据存放在一…

C语言数组

1、数组 数组使用之前必须声明&#xff1a; 类型定义符 数组名[常量表达式] 在声明数组时必须说明数组长度。 较好的方法是用宏来定义数组的长度。 #include <stdio.h> #define N 10 int main() { int arr[N];for(int i0;i<10;i){arr[i]i1;printf("%d &q…