题号:NC231632
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述
有一种随机数生成器工作原理如下:
它存储了若干个数据:一个大于

的整数

,一个正整数

,以及

个整数构成的数组

,保证

。
每次生成随机数时候,它先随机生成两个不相等的整数

,随后返回

作为结果。
出于某种原因,你想让生成的随机数的期望值尽量大。经过一番友好交流,生成器的所有者允许你对内部数据进行若干次修改。
每次修改你可以任意指定

,并翻转

的二进制表示中第

位。不过,你需要保证总修改次数不超过

次,且数组中任意

被修改不超过

次。
你想知道基于上述规则进行修改后,生成的随机数的期望值最大可以达到多少,输出这个最大值。
输入描述:
第一行输入四个整数
,保证
。
第二行输入
个整数
,保证
。
输出描述:
输出一个浮点数,表示最大期望。要求相对误差小于
。
示例1
说明
你没有机会进行任何修改,期望为
。
示例3
输入
复制
10 10 14 5
137 342 507 383 64 445 966 115 647 56