PAT甲级 1014 刷题记录
文章目录
- 一、答案
- (一)推荐答案
- (二)个人解答
- 二、坑点
- 三、相关知识
- (一)vector 与queue 两种结构的使用方法
- (二)其他
一、答案
(一)推荐答案
链接:PAT甲级1014 测试点4、5
(二)个人解答
#include <iostream>
#include<bits/stdc++.h>
using namespace std;struct man //个人结构体
{int id;int serve_time=0;int end_time=0;
};int main()
{int window_num,window_size,customer_num,query_num;cin>>window_num>>window_size>>customer_num>>query_num;vector<man> customer(customer_num); //客户向量,存放客户数据vector<queue<man>> line(window_num); //窗口队列向量,每一个队列对应一个窗口queue<man> wait; //等待队列for(int i=0;i<customer_num;i++){ //读取各顾客等待时间customer[i].id=i;cin>>customer[i].serve_time;}//前“窗口大小*窗口数量”位的顾客直接进入窗口排队,其余进入等待队列for(int i=0;i<customer_num;i++){if(i<window_num*window_size){if(i<window_num){customer[i].end_time=customer[i].serve_time;}line[i%window_num].push(customer[i]);}else{wait.push(customer[i]);}}//伴随各窗口队列顾客离队,为等待队列中的顾客安排窗口,直到没法安排(各窗口第一位顾客完成时间都晚于17:00)int return_tag=0;while(return_tag==0 && !wait.empty()){int fastest_time=540;int fastest_win=-1;//选择首位顾客最早完成的窗口for(int i=0;i<window_num;i++){if(line[i].front().end_time<fastest_time){fastest_time=line[i].front().end_time;fastest_win=i;}}if(fastest_time==540){ //各窗口第一位顾客完成时间都晚于17:00,没法安排窗口return_tag=1;}else{ //安排窗口line[fastest_win].pop(); //窗口队列首位顾客离队line[fastest_win].front().end_time=fastest_time+line[fastest_win].front().serve_time;//更新队头顾客完成时间customer[line[fastest_win].front().id].end_time=line[fastest_win].front().end_time;//同步更新line[fastest_win].push(wait.front());//等待队列顾客入队wait.pop(); //已进入窗口,从等待队列离队}}//窗口剩余顾客离队for(int i=0;i<window_num;i++){while(!line[i].empty()){if(line[i].front().end_time<540){ //当完成时间早于17:00时,一直安排离队int save_time=line[i].front().end_time;line[i].pop();if(!line[i].empty()){line[i].front().end_time=save_time+line[i].front().serve_time;customer[line[i].front().id].end_time=line[i].front().end_time;}}else{break;}}}//读取需查询的顾客,输出结果for(int i=0;i<query_num;i++){int query_cus;cin>>query_cus;query_cus=query_cus-1;int finish_time=customer[query_cus].end_time;if(finish_time!=0){int h=finish_time/60+8;int m=finish_time%60;printf("%02d:%02d\n",h,m);}else{cout<<"Sorry"<<endl;}}return 0;
}
二、坑点
1. 所有业务开始时间早于17:00的顾客都能被服务,哪怕花费9999分钟
2. 优先选择窗口首位顾客最快完成的队伍,哪怕其他队伍总耗时短
三、相关知识
(一)vector 与queue 两种结构的使用方法
这题可以使用简单的整形数组 int [ ] 或 链表与结构体 来完成,但都会比较复杂,使用vector 与queue会是更优解。以下附上两篇链接,可以了解vector 与queue基本使用方法。
1. C++ vector的用法(整理)
2. C++ queue队列 (详细)
(二)其他
同时在写本题过程中还遇到另一个问题:queue中将一个元素入队时是创建了一个新的副本,当队列中的元素修改时,并不会对原元素进行修改,需要自行同步修改。
=> C++ STL的queue中push操作产生副本的问题
最后,萌新写文,如有不足,还望指正
PAT甲级 1014 刷题记录相关推荐
- PAT甲级刷题记录-(AcWing)-(Day06树 8题)
PAT甲级刷题记录-(AcWing)-(Day06树 8题) 课程来源AcWing 其中AcWing中的题目为翻译好的中文题目 今日刷题列表 1110 Complete Binary Tree 111 ...
- 小峰峰的pat甲级刷题记录1020
小峰峰的pat甲级刷题记录1020 方法一:通过后序和中序序列构建树,再层序输出 #include<iostream> #include<vector> using names ...
- Python刷题记录(81-90)
Python刷题记录(81-90) 题目来源PTA平台 PAT (Basic Level) Practice (中文) @TOC 1081 检查密码 本题要求你帮助某网站的用户注册模块写一个密码合法性 ...
- 算法笔记CodeUp第一至第六章刷题记录
文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...
- 重走长征路---OI每周刷题记录---9月21日 2013 AC 17题
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)
LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...
- LeetCode刷题记录14——257. Binary Tree Paths(easy)
LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...
- LeetCode刷题记录13——705. Design HashSet(easy)
LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...
- LeetCode刷题记录12——232. Implement Queue using Stacks(easy)
LeetCode刷题记录12--232. Implement Queue using Stacks(easy) 目录 LeetCode刷题记录12--232. Implement Queue usin ...
最新文章
- 深入理解TCP/IP协议族
- 基于能量或过零率的实时语音分割--学习笔记
- MySQL的my.cnf文件(解决5.7.18下没有my-default.cnf)
- Java NIO系列教程(十 五)Java NIO Path
- 如何查询oracle最近报警信息,教你怎样用Oracle方便地查看报警日志错误
- springboot转发http请求_网易后端实习生分享:Springboot异常和错误处理规范
- mysql 内部安全性_MySQL数据库的内部以及外部安全性简介
- 深度学习行人重识别综述与展望
- R-CNN家族梳理:从R-CNN到Mask R-CNN
- idea 搭建 tensorflow 的 java 开发环境
- 终于解决华硕电脑触摸板的关闭问题
- vue 页面保存为本地图片
- 2020年阴历二月二十六 投资理财~读万科财报有感
- 怎么将excel转换pdf在线转换
- 【笔记】2022.06.20 python数据分析三大神器numpy、pandas、matplotlib
- 随笔记:利用Apache设置反向代理
- ikbc c104win键盘失灵以及数字键失灵
- UG基础知识学习视频目录整理(建模篇)
- 建立KMS服务器,激活WIN、office
- 星瞳科技 OpenMV 的使用