题目:
描述:
我要吃饭!
time limit: 2000ms
space limit: 32MB
小明是我XJTU大二的一名同学,大二同学课多,上午经常是12点放,有时候在中二上课,赶到食堂的时候大家懂的。
小明做为一个资深rush型吃货对于吃什么没什么讲究,热喷喷的饭只要吃到肚子里心里是都暖洋洋的。
所以他希望尽可能快得吃到饭。
现在食堂里面有P个窗口(它们从0开始编号),每个窗口有1个队伍,每个就餐的同学分别有自己的想要吃若干样的东西。小明需要选择一个能让他最快吃上饭的队伍站到后面。
已知今天食堂供应K种食物,每种食物有自己的名字,假设他们在各个窗口里面都有销售且摆放位置是一样的。作为一个有geek精神的好同学,做事自然要精益求精,所以师傅去盛这些菜的时间差异也是要计算在内的。
已知师父在为每个同学打饭时都额外需要W秒的时间来询问同学需要什么并打卡。
已知一大批同学(共N个,其中不含小明)的到达时间和心中所求,小明假设所有同学都和他一样,都希望早吃上饭,并且足够聪明。
请问小明应该如何选择站在那个队伍里面?(如果多个队列可以达到同样的时间,那么选择编号小的队列,其他同样也一样)
简化条件与提示:
1,XJTU的同学在食堂的素质是有口皆碑的,自然没有插队的事情发生。
2,假设我交采用了新型的结合社交网络的电子点餐技术,所有人都提前公布了自己想吃什么(不撒谎的),同学们可以通过手机应用与食堂的基础设置瞬间知道其他人都排在哪个队列里面、都想吃什么,且大家都足够聪明,可以瞬间做出决策。
3,不考虑从做出决策到走进队列的时间。
4,假设我交食堂供应充足,不会出现意外断餐等极端情况。
5,最重要的简化:同一时间到达的同学不是观察到相同的队列情况并做选择,而是按照他们在输入数据中的先后位置,依次决定自己的选择,在决定后,后面的同学再根据新的情况做选择。即假设食堂的门很窄一次只能进一个人。(小明是主角,自然是同一时间内最早到的那个)
6,每个时刻都是打完饭的同学立刻离开,然后打饭的同学才获取数据进行判断。
7,一个师父一次只能为一个同学打饭。
8,不会有人到食堂去点食堂今天不提供的菜式。
9,假设没有人什么也不吃,故意去排队玩。
输入:
所有输入数据用空格将开,如没有特别说明,数据都是非负整数。
第1行:
队伍数量P,食物种类K,同学数量N,师父的询问时间W。
第2行到第K+1行(共K行):
食物的名称(字符串,内部没有空格),供应一次所需时间
第K+2行:
小明的到达时间t,想要吃的东西数量m,以及m个食物的名称
第K+3行到第K+N+2行(共N行):
同学的到达时间ti,想要吃的东西数量mi,以及mi个食物的名称
输出:
两个整数分别表示:小明应该选的队伍编号(从0到P-1),小明拿到饭的最早时间。
第二行:
一个整数表示最后一个拿到饭的同学拿到饭的时间。
数据规模及限制:
P<=20, K<=20, N<=50000
食物名称长度<=16字节,且食物名称内部没有空格。
m<=4,所有时间(询问时间,供应时间,到达时间)及其计算结果均在32位整数范围内。
注意:对于没有明确说明的情况,输入数据不做任何保证,所以你的程序要能有足够的健壮性。
Sample Input:
2 3 5 2
rice 1
tofu 3
fried_tomato 2
9 2 rice tofu
2 2 rice tofu
4 3 fried_tomato tofu rice
12 1 fried_tomato
8 1 rice
8 2 rice tofu
Sample Output:
1 18
21
样例分析:
第1个到达的同学是 2 2 rice tofu
当前各个队列为空,于是他选择了编号最小的0号窗口。
第2个到达的同学是 4 3 fired_tomato tofu rice
此时0号窗口需要再等4秒,1号窗口不需要等,于是他选择1号窗口。
第3个到达的同学是 8 1 rice
此时第1个到达的同学离开。
当前0号窗口需要再等0秒,1号窗口需要等4秒,选择0号窗口。
第4个到达的同学是 8 2 rice tofu
当前0号窗口需要等3秒,1号窗口需要等4秒,选择1号窗口。
第5个到达的是小明 9 2 rice tofu
当前0号窗口需要等8秒,1号窗口需要等3秒,选择1号窗口。
11秒时第3个同学离开。
第6个到达的同学是 12 1 fired_tomato
此时第2个同学离开。
当前0号窗口需要等5秒,1号窗口需要等6秒,选择0号窗口。
至此所有同学均进入了或进入过队列。
17秒时第4个同学拿到饭离开。
18秒时小明拿到饭。
21秒时最后一个同学拿到饭。
解答:
待招新结束后给出