CSDN周赛第30期第四题算法解析。


(本文获得CSDN质量评分【90】)


【学习的细节是欢悦的历程】


  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……

    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室



CSDN周赛第30期第四小题 圆 桌 (算——法——解——析)



本文质量分:

90 】 本文地址: https://blog.csdn.net/m0_57158496/article/details/129435473

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆圆桌
    • 1、题目描述
    • 2 、应考代码
    • 3、解题算法解析
      • 3.1 算法分析
      • 3.2 实现题目示例
      • 3.3 修正“同桌分拣”缺陷
      • 3.3 客人左右不等空座的“迷茫”
    • 4、 我对题目描述的疑惑
    • 5、完整源码

◆圆桌

1、题目描述

【CSDN周赛第30期第四题】

题目 4/4 (25 分)
题目名称:圆桌
时间限制:1000ms内存限制:256M

  有N个客人与足够多张的圆桌。主人安排每位客人坐在一个圆桌边,但是每位客人希望自己左右边上分别有一些空座位,不然会觉得害羞。注意,如果一个客人所在的圆桌只有他一个人,那么他左边的空座位数量就是他右边的空座位数量。 试问主人需要准备多少个座位,才能让每个客人舒适的坐下。

输入描述:
  第一行输入一个整数N,(1<=N<=10000),代表客人的数量 接下来N行,每行两个整数li与ri,(1<=i<=N,1<=li<=ri<=1000000000) 代表第i位客人希望左边有li个空座位,右边有ri个空座位。

输出描述:
  输出一个整数,代表主人需要准备的最少座位数量。

样例1
输入
3
1 1
1 1
1 1

输出
6

样例2
输入
4
1 2
2 1
3 5
5 3

输出
15

提示
【样例解释】3个人围成一桌,每人左右各一个空位置,一共3个空座位。一个共需要3+3=6座位。

2 、应考代码

应考答题截屏图

  应试时,我连题目都没有理清,所以写出了“不知所云”的代码。


回页目录


3、解题算法解析

3.1 算法分析

  首先,要分析哪些客人可以坐一个圆桌,从输入数组分拣出可以坐一桌的客人。再依同桌客人空座信息数组计算所用空座。所有圆桌的空座总数加上客人数,即为所要准备的椅子数。

如示例1:

输入
3
1 1
1 1
1 1

  三个客人左右空座相同,都是1,可以共坐一桌空座需3个,3+3=6,6即是所需准备的椅子总数。

输出
6

3.2 实现题目示例

统计分拣可以同桌的客人

while lis: # 统计同桌客人。tem = [lis[0]]l, r = lis[0]lis.pop(0)for i in lis[:]: # 这里一定要遍历用切片复制lis[:],因为lis可能“动态”变短。li, ri = iif li == r:                tem.append(i)lis.remove(i)r = r

  同桌客人,前一个右边的空座即是后一个客人左边的空座,最后一个客人右边的空座即是第一个客人左边的空座。所以,同桌空座总数即为所有客人右边的空座和。

计算每张圆桌空座:用列表解析出每个客人右边的空座数,用sum()求和。

for i in temp: # 遍历客人分桌列表,计算同桌客人共用空座。result += sum(j[1] for j in i)

代码运行效果

空座1、1、1 + 3人 = 6


空座(2、1 + 5、3) + 4人 = 15

  可以正确输出题目示例,看似完成了代码编写,代码实则是有缺陷的,我们换种输入试试:

  很显然,代码误把能挨个坐成一排,但不却不可以围坐一张圆桌的客人硬拉一起计算共用空座,得到错误的输出。

3.3 修正“同桌分拣”缺陷

  加入同桌分拣检验判定:从最后一个客人开始判定,不可以与首位客人相邻围坐,将该客人数组退回未分拣客人空座信息数组,循环“操作”,直到仅剩一个客人(客人独坐)。

while len(tem) > 1:l_start, ri = tem[-1][1], tem[0][0]if ri == l_start:break # 客人空座链能首尾相接围坐一桌,退出检验循环。else: # 否则,把最后一位客人退回客人空座信息列表lis。lis.append(tem.pop())




  经多组输入数据验证,代码可以正确“分桌”了。

圆桌:满足客人空座需求,准备最少的椅子,合理安排客人入座圆桌相关推荐

  1. 牛客题霸 [ 换钱的最少货币数] C++题解/答案

    牛客题霸 [ 换钱的最少货币数] C++题解/答案 题目描述 给定数组arr,arr中所有的值都为正整数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱 ...

  2. java多线程--哲学家进餐问题(操作系统)(哲学家进餐问题:5个哲学家共用一张圆桌,分别坐在周围的5张椅子上,在圆桌上有5个碗和5只筷子(注意是5只筷子,不是5双),碗和筷子交替排列。)

    哲学家进餐问题:5个哲学家共用一张圆桌,分别坐在周围的5张椅子上,在圆桌上有5个碗和5只筷子(注意是5只筷子,不是5双),碗和筷子交替排列.他们的生活方式是交替地进行思考(thinking)和进餐(e ...

  3. SM30 标准程序 添加事件、checkbox 等客制化需求

    接到一个需求,新建 一个add on 表,并且生成sm30的维护视图 .但是要在视图中,针对某些字段显示描述. 大致需求如下, 1 维护视图中,针对代理人 和 被代理人,是系统账号, 所以需要带出姓名 ...

  4. 我的CSDN笔记总索引(阅读量降序,代码自动遍历生成HTML5源码)

    Python代码用"命令容器"方法os.system(),调用Linux命令行工具crul获取CSDN博文页面源码,Python内置re正则解析出博文笔记信息,按阅读量降序模块输出 ...

  5. 操作系统 - 进程和内存

    操作系统 - 进程和内存 操作系统内核和Shell 系统调用 进程管理 1. 进程控制块PCB 2. 进程的状态 3. 进程通信 3.1 共享存储 3.2 管道 Or 无名管道 3.3 有名管道 3. ...

  6. 用信号量解决进程的同步与互斥探讨

    <p>本篇也是一篇老文,发布于2015年5月,文章比较长,算老博客看的比较多的了,贴到这儿与大家分享,以求多多交流探讨.</p> 前言 现代操作系统采用多道程序设计机制,多个进 ...

  7. 采用信号量机制实现消费者与生产者的线程同步_你还能聊聊常用的进程同步算法? 上篇[五]...

    点击上方 " 布衣码农 " ,免费订阅~选择" 设为星标 ",第一时间免费获得更新~ 「布衣码农」进程同步的最佳实践! 进程同步回顾 进程同步控制有多种方式:算 ...

  8. 用信号量解决进程的同步与互斥

    转自:http://www.cnblogs.com/whatbeg/p/4435286.html 现代操作系统采用多道程序设计机制,多个进程可以并发执行,CPU在进程之间来回切换,共享某些资源,提高了 ...

  9. ======第二章进程管理======

    目录 2.1 进程的基本概念 2.1.1 程序的顺序执行及其特征 2.1.2 前驱图 2.1.3 程序的并发执行及其特征 2.1.4 进程的特征与状态 2.1.5 进程控制块 2.2 进程控制 2.2 ...

最新文章

  1. R语言ggplot2可视化:自定义函数在箱图(boxplot)上添加分组样本个数(count)、分组均值(mean)、箱体填充色自定义、数据标签色彩自定义
  2. 2019年上半年收集到的人工智能卷积神经网络干货文章
  3. 【 Verilog HDL 】函数(function)与任务(task)简单介绍
  4. NLP:以周杰伦的《Mojito》歌词为例字符串切分之清除一段由列表组成的字符串文本中的所有杂乱符号
  5. Java synchronized 实现生产者-消费者模型
  6. Xposed源码剖析——概述
  7. javascript 在对象中使用 定时器_如何使用JavaScript 面向对象编程
  8. 作者:赵菁华(1977-),女,中国电子技术标准化研究院高级工程师。
  9. 如何获取cookie值
  10. 环形队列的输出_Java数据结构:使用数组实现环形队列详解
  11. 她看:2021年95后女性人群洞察与媒体消费趋势前瞻.pdf(附下载链接)
  12. 从病毒到“基础软件污染”,Linux 真的安全吗?
  13. Linux之tr命令
  14. html div findchild,javascript – JQuery查找父div子标签
  15. 8255工作方式一A口和B口输出
  16. 1010 一元多项式求导 (25 分)—PAT (Basic Level) Practice (中文)
  17. 计算机的3d软件家庭版,3DOne家庭版 64位
  18. 【安装教程】python3.6安装Tensorflow-GPU路上的那些坑(WIN10)
  19. python3 使用writerows写入csv时有多余空行的处理办法
  20. 一种快速求解最大团问题的算法

热门文章

  1. 不能忘记陪我们长大的100部电影
  2. SDKMAN 安装软件失败
  3. dnf压爆服务器挑战网站,dnf手游压爆服务器挑战在哪里?地下城与勇士压爆挑战体验时间介绍[多图]...
  4. android 图片过长,【05-25求助】怎样无损加载一张过长的图片
  5. [附源码]计算机毕业设计JAVA社区生鲜仓库管理系统
  6. iOS 实用方法创建单利+宏定义创建单利
  7. 电路设计中电容的常见作用
  8. 2020下半年(小学)教师资格证笔试教育教学知识与能力真题与答案
  9. windows10安装虚拟机详细教程
  10. 【数据结构】无向图的遍历(广度搜索和深度搜索)