UVa 480 Tempus Fugit
题目描述某企业老板工作时间为周一至周五每天9:009 : 009:00至17:0017 : 0017:00午餐时段为12:3012 : 3012:30至13:3013 : 3013:30。她要求所有预约至少提前两周提出并按提出顺序依次处理先到先得。您的程序需要为接下来的一个工作周安排预约。预约时间必须以101010分钟为粒度开始时刻为整点、101010分、202020分、303030分、404040分或505050分。若请求的开始或结束时间不在这些分界点上则将其调整到包含它的两个101010分钟分界点之间开始向下取整结束向上取整。每个已安排的预约之后需要插入101010分钟休息时间除非该预约结束于12:3012 : 3012:30或17:0017 : 0017:00。预约不能跨越午餐时段也不能开始于午餐时段内。每天安排的总时长调整后的时长不含休息不得超过444小时240240240分钟。若某个预约无法在其请求的日期安排则依次尝试当周后续的每一天同一时刻安排到第一个可行的日子。若所有尝试均失败则将该请求者姓名加入“无法安排”列表。输入格式输入文件最多包含252525个预约请求每行一个格式如下name day start_hour start_minute duration_hour duration_minute其中name占前101010个字符位置由字母数字组成day为MON、TUE、WED、THU或FRIstart_hour和start_minute表示开始时间121212小时制duration_hour和duration_minute表示持续时间。例如Johnstone TUE 09 15 1 30表示Johnstone\texttt{Johnstone}Johnstone请求周二9:159 : 159:15开始、时长111小时303030分钟的预约。输入数据保证所有字段合法且时间以最大小时数表示如909090分钟会写为1 30不会写为0 90。输出格式输出分为两部分本周的日程表按周一至周五顺序输出。每一天先输出日期如MONDAY然后按时间升序列出该日的所有预约每个预约格式为姓名 起始时间 to 结束时间时间采用121212小时制如9:00、2:30。若该日无预约则输出No Appointments Scheduled。最后输出APPOINTMENTS COULD NOT BE SCHEDULED FOR:随后每行一个无法安排的人员姓名。样例输入Johnstone TUE 09 15 1 30 Peterson MON 09 00 0 30 McKeever FRI 09 30 1 00 Garzarelli THU 10 45 0 20 Tucker MON 10 00 2 30 Davis MON 02 30 1 00 Corrigan MON 02 00 0 15 Trump WED 01 00 3 00 Logan THU 09 45 1 05 Schulman THU 11 10 0 30输出APPOINTMENT SCHEDULE FOR THE WEEK MONDAY Peterson 9:00 to 9:30 Tucker 10:00 to 12:30 Davis 2:30 to 3:30 TUESDAY Johnstone 9:10 to 10:50 Corrigan 2:00 to 2:20 WEDNESDAY No Appointments Scheduled THURSDAY Garzarelli 10:40 to 11:10 FRIDAY McKeever 9:30 to 10:30 Schulman 11:10 to 11:40 APPOINTMENTS COULD NOT BE SCHEDULED FOR: Trump Logan题目分析本题是一道模拟预约调度的问题关键点在于时间的表示与调整输入采用121212小时制如02 30表示下午2:302 : 302:30需转换为242424小时制分钟数。预约的起止时间需按101010分钟粒度调整开始向下取整结束向上取整调整后的时长用于444小时限制。日程的约束条件每天工作时段为9:00–17:009 : 00 – 17 : 009:00–17:00午餐时段12:30–13:3012 : 30 – 13 : 3012:30–13:30不可用。预约不能跨午餐也不能在午餐期间开始。每个预约后需插入101010分钟休息除非结束于12:3012 : 3012:30或17:0017 : 0017:00因此休息块也需要检查空闲。预约的优先级与重试机制按输入顺序处理先到先得。若指定日期无法安排则尝试同一天该周后续的日子不尝试更早的日子也不尝试不同时刻。这一重试机制使得即使某天已满预约仍可能在后续日期成功。每日总时长限制每天所有调整后的预约时长之和不得超过240240240分钟。注意444小时限制仅针对调整后的时长不包含休息时间。由于输入规模很小最多252525个请求我们无需高级数据结构直接模拟即可。关键在于正确处理所有时间转换和边界条件。解题思路时间转换与块划分将一天的工作时间9:00–17:009 : 00 – 17 : 009:00–17:00划分为484848个101010分钟块用布尔数组occupied[day][block]标记每个块是否已被占用。午餐时段12:30–13:3012 : 30 – 13 : 3012:30–13:30对应的块从212121到262626共666个块初始即标记为已占用。输入的小时数采用121212小时制若小时数小于999例如02代表下午222点则加上121212转换为242424小时制。这样得到起始分钟startOrig sh * 60 sm结束分钟endOrig startOrig dh * 60 dm。然后进行101010分钟取整起始调整startAdj floor10(startOrig)即向下取整到最近的101010分钟分界点。结束调整endAdj ceil10(endOrig)即向上取整到最近的101010分钟分界点。调整后的时长adjDur endAdj - startAdj用于累加每日总时长。安排条件的检查对于某一天ddd判断能否安排一个调整后的预约区间[startAdj, endAdj)需满足以下条件预约区间必须在工作时段内9:00 ≤ startAdj endAdj ≤ 17:00。不能跨越午餐时段即不能出现startAdj LUNCH_START且endAdj LUNCH_START的情况也不能在午餐时段内开始startAdj不能在[LUNCH_START, LUNCH_END)内。区间内所有101010分钟块均空闲。当日累计调整时长 adjDur≤240240240分钟。如果需要添加休息即endAdj ≠ 12:30且endAdj ≠ 17:00则紧随其后的那个101010分钟块也必须空闲且该休息块不能跨越午餐但若endAdj合法该块结束时间不会进入午餐因为休息块从endAdj开始其结束为endAdj 10若endAdj为12:2012 : 2012:20休息至12:3012 : 3012:30恰好合法若endAdj为16:5016 : 5016:50休息至17:0017 : 0017:00也合法均符合规则。上述条件全部满足后执行安排将预约占用的块标记为已占用累加当日总时长记录预约信息若需要休息同时将休息块标记为已占用。重试机制对于每个请求从指定的日期开始依次尝试当天及后续的每一天直到周五一旦在某天成功则不再尝试更晚的日子。若所有天数均失败则将该请求者姓名加入failed列表。输出处理每天按起始时间升序输出该日的预约。时间格式化为121212小时制若小时数≥13≥ 13≥13则减去121212得到下午的显示小时分钟不足两位时补零。注意输出格式中样例中日期行和预约行均无多余缩进而“无预约”的行也不带缩进最终我们采用与样例一致的无前导空格输出。代码实现// Tempus Fugit// UVa ID: 480// Verdict: Accepted// Submission Date: 2026-06-27// UVa Run Time: 0.000s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;constintWORK_START9*60;constintWORK_END17*60;constintLUNCH_START12*6030;constintLUNCH_END13*6030;constintBLOCK10;constintMAX_DAILY240;constintDAYS5;constintBLOCKS_PER_DAY(WORK_END-WORK_START)/BLOCK;intdayIndex(conststringd){if(dMON)return0;if(dTUE)return1;if(dWED)return2;if(dTHU)return3;return4;}stringdayName(inti){staticconststring names[DAYS]{MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY};returnnames[i];}stringformatTime(intminutes){inthminutes/60,mminutes%60;if(h13)h-12;string hhto_string(h);string mm(m10?0:)to_string(m);returnhh:mm;}intfloor10(intt){return(t/BLOCK)*BLOCK;}intceil10(intt){return((tBLOCK-1)/BLOCK)*BLOCK;}structAppointment{string name;intstartMin,endMin;};booloccupied[DAYS][BLOCKS_PER_DAY];intdailyTotal[DAYS];vectorAppointmentschedule[DAYS];vectorstringfailed;boolisFree(intday,intblock){return!occupied[day][block];}boolcanPlace(intday,intstartMin,intendMin,intdur){if(startMinWORK_START||endMinWORK_END||startMinendMin)returnfalse;if(startMinLUNCH_STARTendMinLUNCH_START)returnfalse;if(startMinLUNCH_STARTstartMinLUNCH_END)returnfalse;intstartBlock(startMin-WORK_START)/BLOCK;intendBlock(endMin-WORK_START)/BLOCK;for(intbstartBlock;bendBlock;b)if(!isFree(day,b))returnfalse;if(dailyTotal[day]durMAX_DAILY)returnfalse;returntrue;}voidplaceAppointment(intday,conststringname,intstartMin,intendMin){intdurendMin-startMin;intstartBlock(startMin-WORK_START)/BLOCK;intendBlock(endMin-WORK_START)/BLOCK;for(intbstartBlock;bendBlock;b)occupied[day][b]true;dailyTotal[day]dur;schedule[day].push_back({name,startMin,endMin});if(endMin!LUNCH_STARTendMin!WORK_END){intbreakBlock(endMin-WORK_START)/BLOCK;occupied[day][breakBlock]true;}}intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);for(intd0;dDAYS;d){for(intb0;bBLOCKS_PER_DAY;b)occupied[d][b]false;intlunchStartBlock(LUNCH_START-WORK_START)/BLOCK;intlunchEndBlock(LUNCH_END-WORK_START)/BLOCK;for(intblunchStartBlock;blunchEndBlock;b)occupied[d][b]true;dailyTotal[d]0;}string name,day;intsh,sm,dh,dm;vectortuplestring,int,int,intrequests;while(cinnamedayshsmdhdm){if(sh9)sh12;// 将下午时间转换为24小时制intstartOrigsh*60sm;intdurdh*60dm;intdayIdxdayIndex(day);requests.emplace_back(name,startOrig,dur,dayIdx);}for(autoreq:requests){string reqNameget0(req);intstartOrigget1(req);intdurget2(req);intreqDayget3(req);intstartAdjfloor10(startOrig);intendAdjceil10(startOrigdur);intadjDurendAdj-startAdj;boolscheduledfalse;for(intdreqDay;dDAYS;d){if(!canPlace(d,startAdj,endAdj,adjDur))continue;boolneedBreak(endAdj!LUNCH_STARTendAdj!WORK_END);if(needBreak){intbreakBlock(endAdj-WORK_START)/BLOCK;if(breakBlock0||breakBlockBLOCKS_PER_DAY)continue;if(!isFree(d,breakBlock))continue;}placeAppointment(d,reqName,startAdj,endAdj);scheduledtrue;break;}if(!scheduled)failed.push_back(reqName);}coutAPPOINTMENT SCHEDULE FOR THE WEEK\n;for(intd0;dDAYS;d){coutdayName(d)\n;if(schedule[d].empty()){coutNo Appointments Scheduled\n;}else{sort(schedule[d].begin(),schedule[d].end(),[](constAppointmenta,constAppointmentb){returna.startMinb.startMin;});for(constautoapp:schedule[d])coutapp.name formatTime(app.startMin) to formatTime(app.endMin)\n;}}coutAPPOINTMENTS COULD NOT BE SCHEDULED FOR:\n;for(conststrings:failed)couts\n;return0;}总结本题模拟预约调度核心难点在于时间处理正确转换121212小时制到242424小时制并严格按照101010分钟粒度调整起止时间。约束检查同时考虑空闲块、午餐时段、每日444小时限制以及休息块的插入缺一不可。重试逻辑按输入顺序处理并仅向当周后续日期尝试符合题目要求。由于数据规模很小使用简单的数组模拟即可高效解决。编写此类模拟题时应仔细阅读题目描述的每一条规则并通过样例测试验证边界情况如午餐边界、休息块插入条件、时间格式等确保所有细节无误。本题通过率较高的关键在于对121212小时制的正确转换下午111点至555点对应小时数13–1713 – 1713–17以及休息块检查的完备性。

相关新闻

VC++实现三次样条曲线拟合:原理、算法与工程实践

VC++实现三次样条曲线拟合:原理、算法与工程实践

1. 项目概述:从离散点到平滑曲线的桥梁在数据处理和图形绘制的世界里,我们常常会遇到这样的场景:手头只有一系列离散的测量点,比如实验数据、传感器采样或者用户绘制的草图点,但我们希望得到一条穿过这些点、光滑且能反…

2026/10/14 23:00:56 阅读更多 →
【独家首发】GLM-4-Flash vs GLM-4-Air性能横评:12项基准测试(MMLU、C-Eval、Gaokao-Bench)结果首度公开

【独家首发】GLM-4-Flash vs GLM-4-Air性能横评:12项基准测试(MMLU、C-Eval、Gaokao-Bench)结果首度公开

更多请点击: https://intelliparadigm.com 第一章:GLM系列大模型演进与定位解析 GLM(General Language Model)系列是由智谱AI研发的开源大语言模型家族,以自回归与自编码混合架构为技术基底,持续迭代演进&…

2026/10/13 10:33:23 阅读更多 →
Rapid SCADA部署攻略:Linux环境下的工业级监控系统搭建

Rapid SCADA部署攻略:Linux环境下的工业级监控系统搭建

Rapid SCADA部署攻略:Linux环境下的工业级监控系统搭建 【免费下载链接】scada Contains Rapid SCADA sources 项目地址: https://gitcode.com/gh_mirrors/sc/scada 想要在Linux系统上快速搭建一个功能强大的工业级监控系统吗?Rapid SCADA是一款开…

2026/10/6 21:31:31 阅读更多 →

最新新闻

Three.js WebGL粮仓3D可视化:物联网温湿度空间定位实战

Three.js WebGL粮仓3D可视化:物联网温湿度空间定位实战

简介:本资源是一个基于Vue.js与Three.js开发的物联网粮仓3D可视化管理系统,面向前端开发者、WebGL初学者及智慧农业/仓储数字化从业者,解决传统粮仓监控信息抽象、空间感知弱、数据交互不直观等管理痛点。项目完整实现3D场景渲染、实时环境数…

2026/10/14 23:02:03 阅读更多 →
诺瓦星云科技与老虎集团Java笔试对比:底层原理与业务场景的备考策略

诺瓦星云科技与老虎集团Java笔试对比:底层原理与业务场景的备考策略

1. 拆解这场笔试:两家公司到底在考什么先说说我为什么想聊这个话题。前段时间帮几个学弟学妹复盘秋招,发现一个很普遍的现象:很多人刷了几百道LeetCode,结果一到真实笔试就懵了。尤其是像诺瓦星云科技和老虎集团这种,笔…

2026/10/14 23:02:03 阅读更多 →
Wireshark入门实验:从HTTP抓包到TCP三次握手全解析

Wireshark入门实验:从HTTP抓包到TCP三次握手全解析

如果你正准备开始学习网络协议分析,第一次接触到 Wireshark 的 Introduction 实验,这篇文章就是为你准备的。Wireshark 是目前最主流的图形化抓包工具,它能把网卡上经过的每一个数据包“拍下来”并解析成人类能看懂的协议字段。这个入门实验的…

2026/10/14 23:02:03 阅读更多 →
大厂实习机试攻略:算法题型、高频考点与备考时间线

大厂实习机试攻略:算法题型、高频考点与备考时间线

每年三四月份,大批同学开始投暑期实习简历,其中通信和终端行业头部厂商的机试环节,是很多计算机相关专业学生绕不开的一道坎。我当时参加的就是2021届的暑期实习机试,整体感受是:题量不大但时间紧,表面考算…

2026/10/14 23:02:03 阅读更多 →
Wireshark入门实验全解析:抓包看懂TCP、DNS与HTTP协议

Wireshark入门实验全解析:抓包看懂TCP、DNS与HTTP协议

第一次打开 Wireshark 做 “Lab 1 : Introduction” 的时候,很多人其实根本不知道这个工具到底要我们干什么。我也是从计算机网络的第一堂实验课开始接触它,当时只被告诉一句话:“用它抓包,看里面的协议。” 这句话听起来平平无奇…

2026/10/14 23:02:03 阅读更多 →
对话式AI工程化:多轮对话与上下文管理的生产级解法

对话式AI工程化:多轮对话与上下文管理的生产级解法

这一篇是系列第五篇。前面几篇讲清楚了对话式AI的基础概念、主流模型的技术原理、Prompt工程的常用技巧,以及从零搭建聊天机器人的入门路线。到了这个阶段,再停留在“调用一下API、拼一个聊天窗口”的层面已经没有多大意义了。这篇我想把视角拉高&#x…

2026/10/14 23:00:58 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →