Moving Tables

news2025/1/22 20:53:38

任务内容

Description

The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure.

The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a plan to reform its system. The reform includes moving a lot of tables between rooms. Because the corridor is narrow and all the tables are big, only one table can pass through the corridor. Some plan is needed to make the moving efficient. The manager figured out the following plan: Moving a table from a room to another room can be done within 10 minutes. When moving a table from room i to room j, the part of the corridor between the front of room i and the front of room j is used. So, during each 10 minutes, several moving between two rooms not sharing the same part of the corridor will be done simultaneously. To make it clear the manager illustrated the possible cases and impossible cases of simultaneous moving.

For each room, at most one table will be either moved in or moved out. Now, the manager seeks out a method to minimize the time to move all the tables. Your job is to write a program to solve the manager’s problem.

Input

The input consists of T test cases. The number of test cases ) (T is given in the first line of the input. Each test case begins with a line containing an integer N , 1<= N <= 200 , that represents the number of tables to move. Each of the following N lines contains two positive integers s and t, representing that a table is to move from room number s to room number t (each room number appears at most once in the N lines). From the N+3-rd line, the remaining test cases are listed in the same manner as above.

Output

The output should contain the minimum time in minutes to complete the moving, one per line.

 翻译:

著名的 ACM(高级计算机制造商)公司租用了一栋楼的某一层,该楼层的形状如下图所示。

沿着走廊,楼层在北侧和南侧各有 200 个房间。最近,该公司制定了一项系统改革计划。改革内容包括在房间之间搬运大量的桌子。由于走廊很窄,而且所有的桌子都很大,所以每次只能有一张桌子通过走廊。因此需要制定一些计划来使搬运工作更高效。经理想出了如下计划:将一张桌子从一个房间搬到另一个房间可以在 10 分钟内完成。当把一张桌子从房间 i 搬到房间 j 时,会用到房间 i 前面到房间 j 前面之间的那段走廊。所以,每 10 分钟内,可以同时进行几个在不共用同一段走廊的两个房间之间的搬运工作。为了清晰说明情况,经理列举了可以同时搬运和不能同时搬运的各种情况示例。

对于每个房间而言,最多只会有一张桌子搬进或搬出。现在,经理正在寻找一种能使搬运所有桌子所需时间最短的方法。你的任务就是编写一个程序来解决经理所面临的这个问题。

输入

输入包含 T 个测试用例。测试用例的数量 T 在输入的第一行给出。每个测试用例的第一行包含一个整数 N(1 <= N <= 200),它代表要搬运的桌子数量。接下来的 N 行中,每行包含两个正整数 s 和 t,表示要将一张桌子从房间编号 s 搬到房间编号 t(每个房间编号在这 N 行中最多出现一次)。从第 N + 3 行起,其余的测试用例将按照上述相同的方式列出。

输出

输出应包含完成所有桌子搬运工作所需的最少时间(以分钟为单位),每行输出一个结果。

主要实现思路

  1. 整体思路概述
    • 本题的核心任务是针对 ACM 公司在楼层中移动桌子的场景,给定多组桌子移动的起始房间和目标房间信息,要找出一种方案使得完成所有桌子移动所需的时间最少。由于走廊狭窄,同一走廊区间同时只能有一张桌子移动,程序通过对每个房间对应的走廊区间进行覆盖次数统计,找到被覆盖次数最多的区间,其覆盖次数乘以 10(可能代表每次移动一张桌子经过一个区间需要 10 分钟)就是完成所有桌子移动的最少时间。
  2. 输入与初始化部分
    • 首先定义了多个变量,包括用于存储测试用例数量的t、每组测试用例中桌子移动数量的n等,以及一个足够大的整型数组book用于记录区间被覆盖的次数。通过scanf函数读取测试用例的数量t,然后进入外层while循环处理每个测试用例。在每个测试用例开始时,使用memset函数将book数组所有元素初始化为 0,确保每个区间的覆盖次数初始状态是未被覆盖(为 0 次),接着读取当前测试用例中要移动桌子的数量n
  3. 处理每组桌子移动信息部分(核心逻辑)
    • 内层for循环针对每组要移动的桌子(循环n次),先读取表示桌子移动起始房间号a和目标房间号b。为了统一处理,若a大于b,则交换它们的值,保证a始终小于等于b
    • 接着通过特定的计算方式(a1 = (a + 1) / 2b1 = (b + 1) / 2)将房间号转换为对应的走廊区间表示(根据题目给定的房间与走廊区间对应逻辑),确定了桌子移动所涉及的走廊区间范围。
    • 然后再通过一个内层for循环,遍历从区间起始位置a1到区间结束位置b1的所有区间位置,将对应的book数组元素值加 1,表示这些区间被覆盖了一次(意味着有桌子移动经过这些区间对应的走廊部分),通过这样的方式统计了每个区间被桌子移动覆盖的次数。
  4. 查找最大覆盖次数及输出结果部分
    • 在处理完当前测试用例中所有桌子移动信息后,先将变量max初始化为 0,用于记录区间覆盖次数的最大值。然后通过一个for循环遍历book数组(从第 1 个元素到第 220 个元素,这是根据题目可能涉及的区间范围设定的合理遍历范围),在循环过程中,如果发现当前数组元素值大于已记录的max值,就更新max为当前元素的值,以此找到覆盖次数最多的区间对应的覆盖次数。
    • 最后按照题目要求的输出格式,输出覆盖次数最多的区间的覆盖次数乘以 10 的结果,这个结果可能代表完成所有桌子移动所需的最少时间,完成当前测试用例的处理,继续处理下一个测试用例(回到外层while循环,t--继续下一轮循环),直到所有测试用例都处理完毕。

#include<stdio.h>
#include<string.h>

int main()
{
    int t, n, i, j, a, b, a1, b1, max, h;  // 定义多个整型变量,t用于存储测试用例的数量,n用于存储每组测试用例中要移动桌子的数量,i、j用于循环计数,a、b用于读取输入的房间号,a1、b1用于计算调整后的房间号范围,max用于记录覆盖次数的最大值,h用于交换两个数时的临时存储
    int book[1010];  // 定义一个整型数组book,用于记录每个区间被覆盖的次数,这里数组大小设为1010(根据实际逻辑需求设定的合适大小)

    // 读取测试用例的数量t
    scanf("%d", &t);

    // 外层while循环,针对每个测试用例进行处理,每处理完一个测试用例,t减1,直到所有测试用例都处理完
    while (t--)
    {
        // 使用memset函数将book数组的所有元素初始化为0,为当前测试用例的处理做准备,确保每个区间的覆盖次数初始为0
        memset(book, 0, sizeof(book));

        // 读取当前测试用例中要移动桌子的数量n
        scanf("%d", &n);

        // 内层for循环,用于读取每组要移动桌子的相关房间号信息,并进行相应处理,循环n次,对应n组数据
        for (i = 1; i <= n; i++)
        {
            // 读取表示桌子移动起始房间号a和目标房间号b
            scanf("%d%d", &a, &b);

            // 如果起始房间号a大于目标房间号b,交换它们的值,确保a始终小于等于b,方便后续统一处理
            if (a > b)
            {
                h = a;
                a = b;
                b = h;
            }

            // 计算起始房间号对应的区间起始位置a1,这里通过 (a + 1) / 2 来转换,将房间号转换为对应的区间表示(根据题目特定的逻辑,具体与走廊区间划分相关)
            a1 = (a + 1) / 2;
            // 计算目标房间号对应的区间结束位置b1,同样通过 (b + 1) / 2 来转换,确定对应的区间范围
            b1 = (b + 1) / 2;

            // 内层循环,遍历从区间起始位置a1到区间结束位置b1的所有区间位置,将对应的book数组元素值加1,表示这些区间被覆盖了一次(意味着有桌子移动经过这些区间对应的走廊部分)
            for (j = a1; j <= b1; j++)
            {
                book[j]++;
            }
        }

        max = 0;  // 初始化最大值max为0,用于后续查找book数组中覆盖次数的最大值

        // 遍历book数组,从第1个元素到第220个元素(根据题目可能涉及的区间范围设定的遍历范围),查找覆盖次数的最大值
        for (i = 1; i <= 220; i++)
        {
            if (book[i] > max)  // 如果当前元素值大于已记录的最大值max
                max = book[i];  // 更新最大值max为当前元素的值
        }

        // 输出覆盖次数最多的区间的覆盖次数乘以10的结果,可能代表完成所有桌子移动所需的最少时间(根据题目逻辑要求的输出格式)
        printf("%d\n", max * 10);
    }

    return 0;
}

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

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

相关文章

小程序 - 美食列表

小程序交互练习 - 美食列表小程序开发笔记 目录 美食列表 功能描述 准备工作 创建项目 配置页面 配置导航栏 启动本地服务器 页面初始数据 设置获取美食数据 设置onload函数 设置项目配置 页面渲染 页面样式 处理电话格式 创建处理电话格式脚本 页面引入脚本 …

Facebook广告文案流量秘诀

Facebook 广告文案是制作有效 Facebook 广告的关键方面。它侧重于伴随广告视觉元素的文本内容。今天我们的博客将深入探讨成功的 Facebook 广告文案的秘密&#xff01; 一、广告文案怎么写&#xff1f; 正文&#xff1a;这是帖子的正文&#xff0c;出现在您姓名的正下方。它可…

TEXT2SQL工具vanna本地化安装和应用

TEXT2SQL工具vanna本地化安装和应用 Vanna和Text2SQL环境安装和数据准备 conda虚拟环境安装数据准备ollama环境准备 ollama安装和运行ollama下载模型测试下API方式正常使用 chromaDB的默认的embedding模型准备 vanna脚本跑起来 Vanna和Text2SQL TEXT2SQL即文本转SQL&#xf…

标书里的“废标雷区”:你踩过几个?

在投标领域&#xff0c;标书的质量不仅决定了中标的可能性&#xff0c;更是体现企业专业度的关键。但即便是经验丰富的投标人&#xff0c;也难免会在标书编制过程中踩中“废标雷区”。这些雷区可能隐藏在技术方案的细节中&#xff0c;也可能是投标文件格式的规范问题。以下&…

操作系统——I/O系统

笔记内容及图片整理自XJTUSE “操作系统” 课程ppt&#xff0c;仅供学习交流使用&#xff0c;谢谢。 概述 计算机的两个主要工作是I/O和处理。I/O系统的目标是提高设备利用率&#xff0c;尽量提高CPU与I/O设备间的并行工作程度&#xff0c;I/O主要技术包括中断技术、DMA技术、…

【 工具变量】IPCC碳排放因子数据测算表

一、数据简介&#xff1a; 排放因子法是IPCC提出的一种碳排放估算方法&#xff0c;也是目前适用范围最广、应用最为普遍的方法。将各类能源消耗的实物统计量转变为标准统计量&#xff0c;再乘以各自的碳排放因子&#xff0c;加总之后就可以得到碳排放总量。如果按照ISO14064标…

无插件直播流媒体音视频播放器EasyPlayer.js播放器的g711系列的音频,听起来为什么都是杂音

在数字化时代&#xff0c;流媒体播放器已成为信息传播和娱乐消遣的重要工具。随着技术的进步&#xff0c;流媒体播放器的核心技术和发展趋势不断演变&#xff0c;以满足用户对于无缝播放、低延迟和高画质的需求。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放…

63 基于单片机的四个速度比较

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机&#xff0c;采用四个滑动变阻器连接数模转换器模拟四个速度值&#xff0c;通过LCD1602显示&#xff0c;然后检测出最高的…

4.模块化技术之子程序

总学习目录请点击下面连接 SAP ABAP开发从0到入职&#xff0c;冷冬备战-CSDN博客 目录 ​编辑 1.模块化基础和概述 使用模块化有什么好处 两大类模块化技术 程序局部的模块化 SAP系统内全局模块化 封装有什么好处&#xff1f; 2.子程序模块化 三种传递类型 子程序结构…

利用Python实现子域名简单收集

免责申明 本文仅是用于学习研究子域名信息收集&#xff0c;请勿用在非法途径上&#xff0c;若将其用于非法目的&#xff0c;所造成的一切后果由您自行承担&#xff0c;产生的一切风险和后果与笔者无关&#xff1b;本文开始前请认真详细学习《‌中华人民共和国网络安全法》【学法…

k8s,进一步理解Pod

比如&#xff0c;凡是调度、网络、存储&#xff0c;以及安全相关的属性&#xff0c;基本上是Pod 级别的。 这些属性的共同特征是&#xff0c;它们描述的是“机器”这个整体&#xff0c;而不是里面运行的“程序”。比如&#xff0c;配置这个“机器”的网卡&#xff08;即&#…

Unity 使用LineRenderer制作模拟2d绳子

效果展示&#xff1a; 实现如下&#xff1a; 首先&#xff0c;直接上代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class LineFourRender : MonoBehaviour {public Transform StartNode;public Transform MidNod…

博物馆导览系统方案(一)背景需求分析与核心技术实现

维小帮提供多个场所的室内外导航导览方案&#xff0c;如需获取博物馆导览系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流欢迎私信我们哦~撒花&#xff01; 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中&#xff0c;博物馆作为文化传承和知…

14.在 Vue 3 中使用 OpenLayers 自定义地图版权信息

在 WebGIS 开发中&#xff0c;默认的地图服务通常会带有版权信息&#xff0c;但有时候我们需要根据项目需求自定义版权信息或添加额外的版权声明。在本文中&#xff0c;我们将基于 Vue 3 的 Composition API 和 OpenLayers&#xff0c;完成自定义地图版权信息的实现。 最终效果…

详解下c语言中的typedef

相信学习过c语言的很多同学都对typedef很陌生&#xff0c;感觉它离自己很遥远&#xff0c;自己很少用到。但实际上&#xff0c;我们看很多地方&#xff0c;包括很多大神级别的代码中&#xff0c;它却又经常使用。今天我们就详细描述下它&#xff0c;使我们对它有一个更深的认识…

19. Three.js案例-创建一个带有纹理映射的旋转平面

19. Three.js案例-创建一个带有纹理映射的旋转平面 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它利用 WebGL 技术在浏览器中绘制 3D 图形。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobj…

Ensemble Learning via Knowledge Transfer for CTR Prediction 论文阅读

Abstract:点击率&#xff08;CTR&#xff09;预测在推荐系统和网络搜索中起着关键作用。虽然许多现有的方法利用集成学习来提高模型性能&#xff0c;但它们通常将集成限制在两个或三个子网络中&#xff0c;很少探索更大的集成。在本文中&#xff0c;我们研究了更大的集成网络&a…

苍穹外卖项目练习总结

做这个练习项目已经接近两年之久&#xff0c;现在拿出来复习一遍&#xff0c;主要就是里面处理问题的流程&#xff0c;以及整体思考的逻辑需要重新回顾一遍&#xff0c;后续会逐渐总结这一段时间以来学习到的知识。 项目整体包含两部分&#xff0c;一个是管理端&#xff0c;一…

数学拯救世界(三)———破魔

题目一&#xff1a; 还记不记得&#xff0c;出现带分数的话可以怎么办&#xff1f; 题目二&#xff1a; 还记不记得&#xff0c;昨天讲的重叠数 题目三&#xff1a; 提公因数&#xff0c;抓住问题本质 题目四&#xff1a;

JAVA |日常开发中连接Sqlite数据库详解

JAVA &#xff5c;日常开发中连接Sqlite数据库详解 前言一、SQLite 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 SQLite 数据库的准备工作2.1 添加 SQLite JDBC 驱动依赖2.2 了解 JDBC 基础概念 三、建立数据库连接3.1 代码示例3.2 步骤解析 四、执行 SQL 语句4.1 创建…