P4829 kry loves 2048
题目背景
kls是一个人赢。
题目描述
kls最近在玩一款类似 2048 的游戏,规则是这样的:
一开始,有 $n$ 个方块,每个方块上有一个 $1$ 到 $m$ 的整数。
kls可以进行两种操作:
1. 选择两个数字相同的方块(不一定要相邻),将它们合并成一个数字为原来的两倍的方块;
2. 减小一个方块上的数字。
操作的次数没有限制,最终的得分为所有方块上的最大的数字。
因为kls要去陪妹子了,没有时间继续玩,他想让你帮忙计算一下,最多能得到多少分。
输入格式
因为数据可能很大,读入容易超时,所以kls给你们提供了一个 C++ 的随机数生成器。
```cpp
void generate_array(int a[], int n, int m, int seed) {
unsigned x = seed;
for (int i = 0; i < n; ++i) {
x ^= x > 17;
x ^= x
输出格式
一行一个数,表示最大得分。
说明/提示
### 样例解释
样例 1 生成出来的数是 $6$ $10$ $7$ $5$ $4$。
样例 2 生成出来的数是 $8$ $12$ $48$ $4$ $4$。
### 数据范围
对于 $30\%$ 的数据,$n, m \le 10$;
对于 $60\%$ 的数据,$n, m \le 10^5$;
对于 $100\%$ 的数据,$n, m \le 10^7$,$1 \le seed \le 10^9$。