#codefestival2015finali. [codefestival_2015_final_i]風船ツリー
[codefestival_2015_final_i]風船ツリー
问题描述
小明正在玩链接在一起的 个气球。气球 的绳子长度为 。小明将气球 的绳子抓在手里,然后将气球 的绳子系在气球 上。我们称这样连接在一起的气球为“气球树”。
气球树的高度定义为气球树中包含的最高气球的高度。其中,气球 的高度为 ,气球 的高度为气球 的高度加上 。
小明想要通过解开一些绳子,使得气球树的高度正好等于天花板的高度。他还想知道为了实现这一目标,至少需要解开多少根绳子。当解开气球 的绳子时,气球 以及与其相连的所有气球都会飞走,从气球树中移除。
给定可能的天花板高度的数量 ,请计算每个天花板高度对应的实现目标所需解开的最小绳子数。
输入
输入以以下格式从标准输入中给出。
... ... :
- 第一行包含一个整数 ,表示气球的数量。
- 第二行包含 个整数,以空格分隔,其中第 个整数 表示气球 的绳子长度。
- 第三行包含 个整数,以空格分隔,其中第 个整数 表示小明将气球 的绳子系在气球 上。
- 第四行包含一个整数 ,表示可能的天花板高度的数量。
- 接下来的 行,每行包含一个整数 ,表示天花板的高度。
输出
输出共 行。其中,第 行输出实现气球树高度等于 所需解开的最小绳子数。如果无法实现高度等于 ,则输出 。最后一行也要换行。
示例1
5
1 1 2 2 2
1 2 2 1
2
2
3
输出示例1
3
1
下图分别表示初始的气球树、高度为 的气球树、高度为 的气球树。红色的叉号表示需要解开的绳子。
示例2
10
10 5 6 4 2 2 3 1 1 5
1 1 2 2 3 5 7 7 2
5
10
12
15
17
21
输出示例2
2
-1
4
4
0