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/7/24 17:35:41 阅读更多 →
【独家首发】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/7/23 18:07:46 阅读更多 →
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/7/24 21:26:55 阅读更多 →

最新新闻

86BOX虚拟机:在Windows XP SP3中精准模拟老硬件,解决软件兼容性问题

86BOX虚拟机:在Windows XP SP3中精准模拟老硬件,解决软件兼容性问题

这次我们来看一个专门用于模拟老式计算机系统的开源虚拟机项目:86BOX。它不是一个通用的现代虚拟机软件,而是一个专注于精确模拟上世纪80年代到90年代经典PC硬件的模拟器。简单来说,你可以把它理解为一个“时光机”,用来在今天的Windows、macOS或Linux系统上,原汁原味地运…

2026/7/25 4:26:10 阅读更多 →
从粉丝应援到专业记录:全链路活动内容生产与自动化发布技术方案

从粉丝应援到专业记录:全链路活动内容生产与自动化发布技术方案

这次我们来看一个关于曾沛慈粉丝应援活动的记录项目。从标题“曾沛慈|20260627 pets看无人机应援”来看,这并非一个技术工具或开源模型,而更像是一次粉丝应援活动的记录、分享或纪念性内容。对于技术博客而言,我们的重点不是讨论…

2026/7/25 4:26:10 阅读更多 →
Keyboard Chatter Blocker:彻底告别机械键盘连击问题的终极免费方案

Keyboard Chatter Blocker:彻底告别机械键盘连击问题的终极免费方案

Keyboard Chatter Blocker:彻底告别机械键盘连击问题的终极免费方案 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾…

2026/7/25 4:26:10 阅读更多 →
终极指南:如何用FF14 ACT插件快速跳过副本过场动画

终极指南:如何用FF14 ACT插件快速跳过副本过场动画

终极指南:如何用FF14 ACT插件快速跳过副本过场动画 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 还在为《最终幻想14》中冗长的副本过场动画而烦恼吗?FF14 ACT辍学插件正是你需…

2026/7/25 4:26:10 阅读更多 →
3分钟掌握TMSpeech:Windows下免费实时语音转文字终极指南

3分钟掌握TMSpeech:Windows下免费实时语音转文字终极指南

3分钟掌握TMSpeech:Windows下免费实时语音转文字终极指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 你是否曾在重要会议中因分心错过关键信息?是否因为外语视频语速太快而无法完全理解&…

2026/7/25 4:26:10 阅读更多 →
Onekey终极指南:如何高效配置Steam游戏解锁与Depot清单自动化

Onekey终极指南:如何高效配置Steam游戏解锁与Depot清单自动化

Onekey终极指南:如何高效配置Steam游戏解锁与Depot清单自动化 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey是一款专为Steam平台设计的开源游戏解锁工具,通过自动…

2026/7/25 4:25:10 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻