首页 > 试题广场 >

中位数之和

[编程题]中位数之和
  • 热度指数:2050 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一个长度为 n二进制数组 a(每个元素为 01)。记 k 为奇数。对于数组 a 的所有长度恰为 k子序列,求它们中位数之和,并对 P=1\,000\,000\,007 取模。

【名词解释】
\hspace{15pt}子序列如果 b 可以从 a 中删除几个元素(可能是零,也可能是全部元素),那么数组 b 就是数组 a 的子序列。子序列不必是连续的
\hspace{15pt}中位数长度为奇数 k 的数组的中位数是排序后的第 \frac{k+1}{2} 个元素。

输入描述:
\hspace{15pt}第一行输入整数 t\left(1\leqq t\leqq 10^4\right) 表示测试用例个数。 
\hspace{15pt}对于每个测试用例:
\hspace{23pt}\bullet\, 第一行输入两个整数 n,k,满足 1\leqq k\leqq n\leqq 2\times10^5k 为奇数;
\hspace{23pt}\bullet\, 第二行输入 n 个整数 a_i\in\{0,1\}
\hspace{15pt}保证所有测试用例的 n 之和不超过 2\times10^5


输出描述:
\hspace{15pt}对每个测试用例输出一行一个整数,表示所有长度为 k 的子序列中位数之和模 P 的结果。
示例1

输入

1
5 1
1 1 1 1 1

输出

5

说明

所有长度为 1 的子序列的中位数为 1 ,因此答案为 5 。

这道题你会答吗?花几分钟告诉大家答案吧!