http://www.codechef.com/problems/LEBOBBLE
任何 n 个整数的数组 A 的冒泡排序按以下方式工作:
var int i, j;
for i from n downto 1
{
for j from 1 to i-1
{
if (A[j] > A[j+1])
swap(A[j], A[j+1])
}
}
给你一个包含 n 个整数的数组 B。
然后使用数组 B 创建数组 A,如下所示:对于每个 i (1 <= i <= n),我们设置 Ai = Bi + d 的概率为 Pi,否则 Ai = Bi。帮助 Little Elephant 找出当使用上述冒泡排序算法对数组 A 进行排序时冒泡排序将进行的预期交换次数。输入
输入的第一行包含单个整数 T - 测试用例的数量。T 测试用例如下。每个测试用例的第一行包含一对整数 n 和 d。每个测试用例的下一行包含 n 个整数 - 数组 B。下一行包含 n 个整数 - 数组 P。输出 T 行输出 T 个实数 - 对应测试用例的答案。请将所有数字四舍五入到小数点后 4 位。约束
1 <= T <= 5
1 <= n <= 50000
1 <= Bi, d <= 10^9
0 <= Pi, <= 100
Example
Input:
2
2 7
4 7
50 50
4 7
5 6 1 7
25 74 47 99
Output:
0.2500
1.6049
你对如何解决这个问题有任何提示吗?