用AI出了道新题…
砌墙大师
题目描述
砖厂老板给砌墙大师 n 块砖,按顺序编号 1..n,第 i 块砖的水泥量为 a[i]。
大师要把这 n 块砖按原顺序砌成若干层:每层是连续的一段砖,层与层首尾相接、不重不漏覆盖全部砖。每层的水泥量 = 该层砖的水泥量之和。
设最终层数为 m(墙的实际修筑高度),第 k 块砖所在层号为 h[k](1 ≤ h[k] ≤ m)。
· 老板标准:每层水泥量 ≥ S。老板给的标准可能是虚假的,大师不知道真假,只能看实际砌出的墙。
· 国家标准:层数 m ≥ H,否则直接不合格。
· 房主选了 q 块砖 b[1..q](互不相同),房主标准为 T:被选砖的水泥量必须 ≥ T,否则房屋卖不出去。
· 房主还检查位置高度:被选砖中,离墙顶最远的那块砖,其离顶距离为
y = max over k of (m - h[b[k]])。
· 高度缺口 x = max(0, H - m)(实际墙比国家标准矮多少)。
· 心理预值 P = C / (1 + x)(C 为给定常数;x 越大,印象分越低,P 越小,大师越容易举报)。
· 若 y > P,大师举报老板,老板进监狱。
问:是否存在一种分层方案,使得以下四条同时成立:
1. 每层水泥量 ≥ S;
2. m ≥ H;
3. 对所有 k,a[b[k]] ≥ T;
4. y ≤ P,即 y · (1 + x) ≤ C(整数精确比较,避免浮点)。
若存在,输出 YES;否则输出 NO。
约定:若 q = 0,跳过条件 3、4(没有砖可查),只看条件 1、2。若 q ≥ 1 但条件 3 已失败,直接 NO。
---
输入格式
```
n S H C T q
a[1] a[2] ... a[n]
b[1] b[2] ... b[q]
```
· 第一行六个整数 n, S, H, C, T, q。
· 第二行 n 个整数 a[i]。
· 第三行 q 个整数 b[k](互不相同;q = 0 时该行为空行)。
输出格式
一行,YES 或 NO。
数据范围
· 1 ≤ n, q ≤ 2×10^5(q 可为 0)
· 1 ≤ a[i], S, T ≤ 10^9
· 0 ≤ H ≤ n
· 0 ≤ C ≤ 10^9
· 1 ≤ b[k] ≤ n,互不相同
· 时间限制 2s,空间限制 256MB
---
样例
样例 1
```
输入:
6 5 2 10 3 2
2 4 3 3 1 5
2 5
输出:
YES
```
一种分层:[2,4] | [3,3] | [1,5],m = 3 ≥ 2。砖 2、5 分别在 1、3 层,离顶最远距离 y = max(3-1, 3-3) = 2。x = max(0, 2-3) = 0,P = 10,y·(1+x) = 2 ≤ 10。水泥量 4、5 均 ≥ 3。全部满足。✅
样例 2(水泥量不达标)
```
输入:
5 1 3 0 2 2
1 1 1 1 1
1 5
输出:
NO
```
所有砖水泥量为 1,小于房主标准 T = 2,条件 3 失败。❌
样例 3(层数不足)
```
输入:
4 3 3 10 0 1
2 2 2 2
2
输出:
NO
```
每层和 ≥ 3,最多分 2 层([2,2] | [2,2]),m = 2 < H = 3,条件 2 失败。❌
样例 4(心理预值卡住)
```
输入:
6 1 3 0 0 2
1 1 1 1 1 1
1 6
输出:
NO
```
C = 0,故 P = 0。被选砖 1 必在第 1 层,砖 6 最高也只能在第 m 层,离顶最远距离 y ≥ m - 1。又 m ≥ H = 3,故 y ≥ 2 > 0 = P,条件 4 失败。❌
样例 5(q = 0)
```
输入:
3 2 2 0 0 0
1 1 1
输出:
NO
```
q = 0,只看条件 1、2。每层和 ≥ 2,[1,1,1] 最多 1 层,m = 1 < H = 2,条件 2 失败。❌
样例 6(多砖联合、分式判定)
```
输入:
8 2 4 4 0 3
1 1 1 1 1 1 1 1
2 5 8
输出:
YES
```
一种分层:[1,1] | [1,1] | [1,1] | [1,1],m = 4。砖 2、5、8 分别在 1、3、4 层,y = max(4-1, 4-3, 4-4) = 3。x = max(0, 4-4) = 0,P = 4,y·(1+x) = 3 ≤ 4。水泥量均 ≥ 0。全部满足。✅
---


