题目内容
定义一个正整数 x 的"能量值"为:x 中质因子 2 的个数,即 x 能被 2 整除的次数(例如 8 = 2 × 2 × 2,其能量值为 3;6 = 2 × 3,其能量值为 1;奇数 5 的能量值为 0)。
给定一个长度为 n 的正整数序列 a 和一个目标能量值 k。一个连续子序列的能量值等于其中所有元素能量值之和。
请找出一个连续子序列,使得它的能量值至少为 k,并输出所有满足条件的连续子序列中长度最短的那个的长度。如果不存在这样的子序列,输出 -1。
约束条件:n 不超过 105,k 不超过 105,每个 ai 均为不超过 109 的正整数。
输入描述
第一行包含两个正整数 n 和 k(1≤n≤105,1≤k≤105)。
第二行包含 n 个正整数 a1,a2,…,an(1≤ai≤109)。
输出描述
输出一个整数,表示能量值至少为 k 的连续子序列的最短长度。如果不存在,输出 -1。
样例1
输入
4 4
6 10 14 18
输出
4
说明
各元素的能量值分别为:6 的质因子 2 个数为 1,10 为 1,14 为 1,18 为 1,总和为 4。
由于目标 k=4,需要取满全部 4 个元素才能达到能量值 4,因此最短长度为 4。
样例2
输入
5 3
8 6 1 12 2
输出
1
说明
各元素的能量值分别为:8 的质因子 2 个数为 3,6 为 1,1 为 0,12 为 2,2 为 1。
单独取第一个元素 8,其能量值为 3 \ge k = 3,子序列长度为 1,已经达到目标,因此最短长度为 1。
样例3
输入
3 10
4 16 5
输出
-1
说明
各元素的能量值分别为:4 的质因子 2 个数为 2,16 为 4,5 为 0,总和为 6。
由于 6<k=10,即使取全部 3 个元素也无法达到目标能量值,因此不存在合法子序列,输出 -1。