#lydlx06x0B29. 雇佣收银员 Cashier Employment

雇佣收银员 Cashier Employment

题目描述

一家超市要每天 24 小时营业,为了满足营业需求,需要雇佣一大批收银员。

已知不同时间段需要的收银员数量不同,为了能够雇佣尽可能少的人员,从而减少成本,这家超市的经理请你来帮忙出谋划策。

经理为你提供了一个各个时间段收银员最小需求数量的清单 R(0),R(1),R(2),,R(23)R(0),R(1),R(2),\dots,R(23)

R(0)R(0) 表示午夜 00:00 到凌晨 01:00 的最小需求数量,R(1)R(1) 表示凌晨 01:00 到凌晨 02:00 的最小需求数量,以此类推。

一共有 NN 个合格的申请人申请岗位,第 ii 个申请人可以从 tit_i 时刻开始连续工作 8 小时。

收银员之间不存在替换,一定会完整地工作 8 小时,收银台的数量一定足够。

现在给定你收银员的需求清单,请你计算最少需要雇佣多少名收银员。

输入格式

第一行包含一个不超过 20 的整数,表示测试数据的组数。

对于每组测试数据,第一行包含 24 个整数,分别表示 R(0),R(1),R(2),,R(23)R(0),R(1),R(2),\dots,R(23)

第二行包含整数 NN

接下来 NN 行,每行包含一个整数 tit_i

输出格式

每组数据输出一个结果,每个结果占一行。

如果没有满足需求的安排,输出 No Solution

样例

输入样例:

1
1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
5
0
23
22
1
10

输出样例:

1

样例解释

需求清单 R(0)=1,R(2)=1,R(6)=1,R(23)=1R(0)=1, R(2)=1, R(6)=1, R(23)=1,其余时间为 0。

有 5 个申请人,可以开始工作的时间分别为 0, 23, 22, 1, 10。

只需要雇佣一个从 0 时刻开始工作的人(工作到 8 时),就可以覆盖 R(0),R(1),,R(7)R(0), R(1), \dots, R(7) 的需求。
R(2)=1R(2)=1 被覆盖,R(6)=1R(6)=1 被覆盖,R(23)=1R(23)=1 没有被覆盖,但 R(23)R(23) 的需求是 0(因为 R(23)R(23) 的值是 1? 仔细看输入:最后一个是 1 吗?输出样例是 1 表示只雇一个人能满足吗?
我们需要检查:
需求:R(0)=1R(0)=1(0-1点),R(2)=1R(2)=1(2-3点),R(6)=1R(6)=1(6-7点),R(23)=1R(23)=1(23-24点)。
一个从 0 开始工作的人:覆盖 0-8 点,覆盖 R(0),R(2),R(6)R(0),R(2),R(6),但 R(23)R(23) 没有被覆盖。
但是 R(23)R(23) 到底是 0 还是 1?输入中 "1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1"
最后一个是 1,所以 R(23)=1R(23)=1 没有被覆盖到。
但是输出是 1,意味着可能是存在从 23 开始工作的人,覆盖 23-7 点,能覆盖 R(23),R(0),R(2),R(6)R(23),R(0),R(2),R(6) 吗?
从 23 开始:覆盖 23,0,1,2,3,4,5,6 共 8 小时,正好覆盖 R(23),R(0),R(2),R(6)R(23), R(0), R(2), R(6),所以只需要雇佣一个从 23 开始的人。
而申请人中有 23 这个开始时间,因此答案为 1。

数据范围

  • 0R(i)10000 \le R(i) \le 1000
  • 0N10000 \le N \le 1000
  • 0ti230 \le t_i \le 23

时空限制

  • 时间限制:1 秒
  • 空间限制:64 MB