#P2959. 第3题-救灾物资快速分配方案

第3题-救灾物资快速分配方案

题目内容

某地发生地震道路被毁,只有一条路可走,多个市派出车队运送物资,每个市提供的物资车数不一样,到达灾区后需排队依次进入,各市车队组成一个数组cars[]cars[],队首的市的物资车数为cars[0]cars[0],以此类推。

同时灾区临时营地中的多人排队领取物资,组成一个领物资队伍,表示为数组requires[]requires[],排在第11名的需求车数为的为requires[0]requires[0],以此类推。

为尽快缩减营地中排队领物资队伍的长度,制定了一套发放规则: 假设当前进入营地的市车队运来的物资车数为K

1、在领取队伍中,找到需求和小于等于K的最长的一个子队伍,即子序列的和小于等于KK最长连续子序列(仅包含一个成员也是可以的),将当前营地中的所有市车队物资分配给这个子序列中的所有人,此为完成一次分配。

2、若未找到任何人满足分配条件,则放入下一个市车队进入营地,与营地中已有的物资车累加起来,重新进行分配计算。问按照此规则发放,总计进行了多少次分配,有多少人不能领到物资?

输入描述

输入为两行:

11行为各市物资车数的数组carscars,空格分隔,car[i]car[i]表示编号i(i<=200)i(i<=200)的市运来的物资车数(1<=car[i]<=5000)(1 <= car[i] <=5000)。例如:3 5 7 9 3 2 13\ 5\ 7\ 9\ 3\ 2\ 1

22行为需求数组requiresrequires数,空格分隔,requires[]requires[]表示编号j(j<=105)j( j<=10^5)的人的需求数(1<=requires[j]<=100)(1 <= requires[j ]<=100)。例如:1 2 4 5 21\ 2\ 4\ 5\ 2非法输入返回1-1

输出描述

输出分配总次数和不能分到物资的人数,用空格分隔。

例如:

2 02\ 0

表示总计分配次数为2,未分配到物资人数为00

样例1

输入

8 7 3 6 6 2 1
7 1 2 4 6 1 2 3 1 4 5

输出

4 1

说明

image

11次分配:通过计算得到小于等于88的最长子序列为1,2,3,11,2,3,1,因此将营地中物资88车全部分配给1,2,3,11,2,3,1,完成第一次分配。

22次分配:77车物资分给1 2 41\ 2\ 4

33次分配:99车物资分给4,54,5

44次分配:66车物资分给66

此时市队伍剩余2,12,1,且2在营地中待分配,领物资队伍剩余77。进行分配计算,得出无法进行分配,因此将下一个市进入营地,此时营地中累计物资车数为33,进行分配计算,仍无法分配且市队伍已无市可用,流程结束。

综上,总计成功分配了44次,剩余11个人,输出4 14\ 1

样例2

输入

8
4 2 2 8 2 2 2 1

输出

1 4

说明

分析小于等于88的子序列:相对较长的有这两个,4 2 2,2 2 2 14\ 2\ 2,2\ 2\ 2\ 1,因2 2 2 12\ 2\ 2\ 1长度更长,因此进行实际分配,领物资队伍剩余4 2 2 84\ 2\ 2\ 8。累计分配了11次。输出1 41\ 4

样例3

输入

2 2 2 2
8 9 8 8

输出

1 3

说明

44个市的物资分配给第一个人,只进行了11次分配,剩余33个人,因此输出1 31\ 3