poj 2424 餐厅与客人

来源:互联网 发布:浙大计算机 专硕 知乎 编辑:程序博客网 时间:2024/04/30 11:01

采用三个数组存放三种桌子最短空闲时间

然后通过简单模拟实现

#include <iostream>#include <vector>#include <map>#include <list>#include <set>#include <deque>#include <stack>#include <queue>#include <algorithm>#include <cmath>#include <cctype>#include <cstdio>#include <iomanip>#include <cmath>#include <cstdio>#include <iostream>#include <string>#include <sstream>#include <cstring>#include <queue>using namespace std;///宏定义const int INF = 20000000;//const int maxn = 10010;const int MAXN = 210;///全局变量 和 函数int A, B, C;int Aleft, Bleft, Cleft;struct dinner{int arrivalTime;int customers;};int str2int(string str){int time = 0;time = (str[4] - '0' + (str[3] - '0') * 10) + (str[1] - '0' + (str[0] - '0') * 10) * 60;return time;}int sum;int tableA[MAXN];int tableB[MAXN];int tableC[MAXN];int minFreeTimeA, minFreeTimeB, minFreeTimeC;int minFreePosA, minFreePosB, minFreePosC;int main(){///变量定义int i, j;while (1){cin >> A >> B >> C;if (A == 0 && B == 0 && C == 0)break;memset(tableA, 0, sizeof(tableA));memset(tableB, 0, sizeof(tableB));memset(tableC, 0, sizeof(tableC));sum = 0;dinner dinners;while (1){string tempstr;cin >> tempstr;if (tempstr == "#")break;dinners.arrivalTime = str2int(tempstr);cin >> dinners.customers;if (dinners.customers <= 2){minFreePosA = 0;minFreeTimeA = tableA[minFreePosA];//每到一位顾客,扫描最先空的桌子,记录最早空时间和对应的桌子编号for (i = 0; i < A; i++){//如果有空桌子直接吃,更新该桌子最早空闲时间if (tableA[i] < dinners.arrivalTime){tableA[i] = dinners.arrivalTime + 30;sum += dinners.customers;break;}if (tableA[i] < minFreeTimeA){minFreeTimeA = tableA[i];minFreePosA = i;}}//如果到达时没有空桌子if (i == A){//如果要等,找下一个找最短时间桌子if (minFreeTimeA <= (dinners.arrivalTime + 30)){minFreeTimeA = minFreeTimeA + 30;tableA[minFreePosA] = minFreeTimeA;sum += dinners.customers;}}}else if (dinners.customers <= 4){minFreePosB = 0;minFreeTimeB = tableB[minFreePosB];//每到一位顾客,扫描最先空的桌子,记录最早空时间和对应的桌子编号for (i = 0; i < B; i++){//如果有空桌子直接吃,更新该桌子最早空闲时间if (tableB[i] < dinners.arrivalTime){tableB[i] = dinners.arrivalTime + 30;sum += dinners.customers;break;}if (tableB[i] < minFreeTimeB){minFreeTimeB = tableB[i];minFreePosB = i;}}//如果到达时没有空桌子if (i == B){//如果要等,找下一个找最短时间桌子if (minFreeTimeB <= (dinners.arrivalTime + 30)){minFreeTimeB = minFreeTimeB + 30;tableB[minFreePosB] = minFreeTimeB;sum += dinners.customers;}}}else if (dinners.customers <= 6){minFreePosC = 0;minFreeTimeC = tableC[minFreePosC];//每到一位顾客,扫描最先空的桌子,记录最早空时间和对应的桌子编号for (i = 0; i < C; i++){//如果有空桌子直接吃,更新该桌子最早空闲时间if (tableC[i] < dinners.arrivalTime){tableC[i] = dinners.arrivalTime + 30;sum += dinners.customers;break;}if (tableC[i] < minFreeTimeC){minFreeTimeC = tableC[i];minFreePosC = i;}}//如果到达时没有空桌子if (i == C){//如果要等,找下一个找最短时间桌子if (minFreeTimeC <= (dinners.arrivalTime + 30)){minFreeTimeC = minFreeTimeC + 30;tableC[minFreePosC] = minFreeTimeC;sum += dinners.customers;}}}}cout << sum << endl;}///结束return 0;}


原创粉丝点击