1014. Waiting in Line (30)
2016-06-28 17:51
447 查看
目录
目录原题
思路
代码
原题
1014. Waiting in Line (30)思路
有几个窗口就设定几个队列,外加一个黄线外的队列。每个队列独立计时。模拟银行服务过程运行,使用数组记录每一个顾客的服务时间。查询时,就直接输出时间即可。代码
#include <cstdio> #include <cstdlib> #include <cstring> #include <climits> #include <queue> struct customer { int rank, time; }; void process(std::queue<customer> *que, std::queue<customer> &out_yell, int *time, int *everyone); int n, m, k; int main(void) { int q, query, hour, minute, *everytime; scanf("%d %d %d %d", &n, &m, &k, &q); std::queue<customer> *que = new std::queue<customer> ; std::queue<customer> out_yell; everytime = new int[k + 1]; for (int i = 1; i < k + 1; i++) { customer temp; scanf("%d", &(temp.time)); temp.rank = i; out_yell.push(temp); everytime[i] = temp.time; } int *time = new int , *everyone = new int[k + 1]; memset(time, 0, sizeof(int) * n); memset(everyone, -1, sizeof(int) * k); process(que, out_yell, time, everyone); for (int i = 1; i < k + 1; i++) { if (everyone[i] - everytime[i] >= 540) { everyone[i] = -1; } } for (int i = 0; i < q; i++) { scanf("%d", &query); if (-1 == everyone[query]) { printf("Sorry\n"); } else { hour = everyone[query] / 60 + 8; minute = everyone[query] % 60; printf("%02d:%02d\n", hour, minute); } } delete[] time; delete[] everyone; delete[] que; delete[] everytime; return 0; } void process(std::queue<customer> *que, std::queue<customer> &out_yell, int *time, int *everyone) { customer person; while (que[n - 1].size() < m) { for (int i = 0; i < n; i++) { if (out_yell.empty()) { break; } person = out_yell.front(); out_yell.pop(); que[i].push(person); } if (out_yell.empty()) { break; } } int criticalq, criticalt; while (!out_yell.empty()) { criticalt = INT_MAX; for (int i = 0; i < n; i++) { if (time[i] + que[i].front().time < criticalt) { criticalt = time[i] + que[i].front().time; criticalq = i; } } time[criticalq] += que[criticalq].front().time; everyone[que[criticalq].front().rank] = criticalt; que[criticalq].pop(); person = out_yell.front(); out_yell.pop(); que[criticalq].push(person); } while (true) { criticalt = INT_MAX; for (int i = 0; i < n; i++) { if (!que[i].empty() && time[i] + que[i].front().time < criticalt) { criticalt = time[i] + que[i].front().time; criticalq = i; } } if (INT_MAX == criticalt) { break; } time[criticalq] += que[criticalq].front().time; everyone[que[criticalq].front().rank] = criticalt; que[criticalq].pop(); } return; }
相关文章推荐
- Maven “Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:create...”问题总结
- 杭电ACM1022Train Problem I
- fastdfs负载均衡
- [leetcode] 336. Palindrome Pairs
- CDISC SDTM IS domain学习笔记
- explain参数详解
- CDISC SDTM IE domain学习笔记
- 算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
- 算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
- Condition的await-signal流程详解
- CDISC SDTM EG domain学习笔记
- Leetcode Palindrome Pairs
- 解决saiku读取配置文件乱码
- Contains Duplicate 包含重复
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATI
- 证书链(The Certificate Chains)
- AIDL与service
- 当在mybatis用到foreach的时候,会报这个错误Parameter '__frch_item_0' not found. Available parameters are [list]会出现的
- 学习记录 -- web.xml中security-constraint配置测试
- Saiku配置Mondrian中Schema中文乱码问题解决方案