杂题——Money Trees
Money Trees
Luca is in front of a row of $n$ trees. The $i$-th tree has $a_i$ fruit and height $h_i$.
He wants to choose a contiguous subarray of the array $[h_l, h_{l+1}, \dots, h_r]$ such that for each $i$ ($l \leq i < r$), $h_i$ is divisible$^{\dagger}$ by $h_{i+1}$. He will collect all the fruit from each of the trees in the subarray (that is, he will collect $a_l + a_{l+1} + \dots + a_r$ fruits). However, if he collects more than $k$ fruits in total, he will get caught.
What is the maximum length of a subarray Luca can choose so he doesn’t get caught?
$^{\dagger}$ $x$ is divisible by $y$ if the ratio $\frac{x}{y}$ is an integer.
Input
The first line contains a single integer $t$ ($1 \leq t \leq 1000$) — the number of test cases.
The first of each test case line contains two space-separated integers $n$ and $k$ ($1 \leq n \leq 2 \cdot 10^5$; $1 \leq k \leq 10^9$) — the number of trees and the maximum amount of fruits Luca can collect without getting caught.
The second line of each test case contains $n$ space-separated integers $a_i$ ($1 \leq a_i \leq 10^4$) — the number of fruits in the $i$-th tree.
The third line of each test case contains $n$ space-separated integers $h_i$ ($1 \leq h_i \leq 10^9$) — the height of the $i$-th tree.
The sum of $n$ over all test cases does not exceed $2 \cdot 10^5$.
Output
For each test case output a single integer, the length of the maximum length contiguous subarray satisfying the conditions, or $0$ if there is no such subarray.
Example
input
1 |
|
output
1 |
|
翻译
卢卡在一排 $n$ 树前。第 $i$ 棵树有 $a _ i$ 颗果实,高度为 $h _ i$ 。
他想要选择数组 $[h _ l, h _ {l+1}, \dots, h _ r]$ 的一个连续子数组,这样对于每个 $i$ ( $l \leq i < r$ ),**$h _ i$ 可以被 $^{\dagger}$ 整除于 $h _ {i+1}$**。他将收集子数组中每棵树的所有水果(即,他将收集 $a _ l + a _ {l+1} + \dots + a _ r$ 水果)。但是,如果他收集的水果总数超过 $k$ 个,他就会被抓住。
卢卡可以选择的子数组的最大长度是多少,这样他就不会被抓住?
如果比率 $\frac{x}{y}$ 是整数,则 $^{\dagger}$ $x$ 可被 $y$ 整除。
输入
第一行包含一个整数 $t$ ( $1 \leq t \leq 1000$ ) - 测试用例的数量。
每个测试用例行的第一个包含两个以空格分隔的整数 $n$ 和 $k$ ( $1 \leq n \leq 2 \cdot 10^5$ ; $1 \leq k \leq 10^9$ ) - Luca 在不被抓住的情况下可以收集的树木数量和最大水果数量。
每个测试用例的第二行包含 $n$ 个空格分隔的整数 $a_i$ ( $1 \leq a_i \leq 10^4$ ) - 第 $i$ 棵树中的水果数量。
每个测试用例的第三行包含 $n$ 个空格分隔的整数 $h_i$ ( $1 \leq h_i \leq 10^9$ ) - 第 $i$ 棵树的高度。
所有测试用例的 $n$ 总和不超过 $2 \cdot 10^5$ 。
输出
对于每个测试用例输出一个整数,满足条件的最大长度连续子数组的长度,或者如果没有这样的子数组则为 $0$ 。
input
1 |
|
output
1 |
|
笔记
在第一个测试用例中,Luca 可以选择包含 $l=1$ 和 $r=3$ 的子数组。
在第二个测试用例中,Luca 可以选择具有 $l=3$ 和 $r=4$ 的子数组。
在第三个测试用例中,Luca 可以选择具有 $l=2$ 和 $r=2$ 的子数组。
思路
创建l,r指针,r满足向右走sum+=a[r],r++,不满足l向右走sum-=a[l],l–;
当l==r使,r向右走
当高度不满足时,重新累计sum=0,l指针直接转向r,r++;
然后取r-l最大的区间
代码
1 |
|