《C语言课题表模板》由会员分享,可在线阅读,更多相关《C语言课题表模板(2页珍藏版)》请在金锄头文库上搜索。
1、问题描述XXX和它的点餐系统在07:00:00开始工作,在22:00:01关闭。XXX一共有N种食物和M种套餐类型,每种套餐中包含多种食物,具体配置信息将在菜单文件 (dict.dic) 中提供。对于制作和存储每种食物,规定第i种食物在ti秒内完成,其最大存储容量为capi ,表示该种食物最多可以存储capi个。XXX系统每天开放前,所有食物存储容量都为0,在任何时间点如果某种食物的存储量小于capi,则会立即制作该食物,直到达到capi。其中,不同种类食物可以同时制作,同种类食物只能依次制作。从07:00:00到22:00:00(含),学生可以在系统中点餐(如果系统未关闭)。每一天按照顺序有
2、n个订单,第i个订单发生在时间ai:bi:ci,其要求一份typei类型(typeiMcomboNfood,其中Mcombo和Nfood分别表示全体的套餐和食物的集合)的套餐或食物。如果点餐时系统关闭,会导致点餐失败。22:00以后如果还有之前的订单未完成,则XXX会继续加班,且保证23:59:59(含)前一定能完成所有订单。对于订单处理存在如下规则: 在每一秒的开始,如果有新的食物完成,则首先存储食物,然后接受订单(如果存在)。 订单按照“先来先到,异步处理”原则进行处理。 先来先到:指的是对于有存量的食物,总会被分配给时间最早的订单(套餐或单点)。 异步处理:指的是当一个订单(套餐或单点)
3、因为请求的食物没有被全部满足时,不必等待该订单完成,可以直接处理下一个订单。 食物一旦被分配给订单,就不能撤销。食物被分配给订单后,即便该订单尚未完成,该食物也不再占用对应类型的容量。 当订单(套餐或单点)中要求的所有食物,均已被分配给该订单,则该订单会立刻完成。 如果在某个时刻t0,有人下了一个订单,并且该订单无法立刻完成,导致未完成订单的数量大于W1,则系统立即自动关闭(不再接受订单),但该订单仍然算作成功下单。 如果在某个时刻t1,未完成订单的数量小于W2,则系统将在1秒后重新打开。即系统可以接受t1+1时刻的订单,而不能接受t1时刻的订单。 你的系统需要输出:每一个订单是否下单成功,以
4、及完成的时间。 菜单文件本题为大家提供XXX的菜单文件(dict.dic),按如下格式给出:第一行给出N和M,其中N表示食物的种类数(1N100),M表示套餐的种类数(1M100)。第二行包含N个字符串,每个字符串 nameifood表示第i种食物的名称(不超过50个字符)。第三行包含N个整数t1,t2,.,tN(1ti70),其中ti表示第i种食物的制作时长。第四行包含N个整数cap1,cap2,.,capN(1capi54001),其中capi表示第i种食物的最大存储容量。第五行包含两个整数W1,W2(2W2W1100)。 接下来M行,其中的第i行包含多个字符串,第一个字符串nameico
5、mbo表示第i个套餐的名称(不超过50个字符),后续的第j个字符串namei,jfood表示第i个套餐中包含的第j种食物的名称。一个套餐包含的食物种类不超过5,每种食物只有1个。注:系统每次运行时所读取的菜单文件内容可能不一样。输入第一行包含一个整数n(1n54001)表示订单个数。对于接下来的n行,用格式类似于11:11:11的方式,给出第i个订单的时间。然后输入一个字符串typei,表示套餐或食物的名称(参见dict.dic)。所有订单时间一定在07:00:00,22:00:00内,同一个时间点不可能出现多个订单,第i1个订单一定早于第i个(2in),且保证23:59:59(含)前一定能完成所有订单。具体参见input.txt输出输出包括n行,按照订单顺序输出订单完成时间。对于第i行,如果第i个订单不成功,则输出Fail;否则,输出这个订单完成的时间,时间格式与输入格式(11:11:11)一致。 具体参见output.txt