数据结构与算法专题题库

1028. 数的变换

单点时限: 2.0 sec

内存限制: 512 MB

给定一个长度为$n$的数组,总共有$m$次操作,每次操作可以任意选择数组中的一个数,将其变成原来的数加$1$。

求经过$m$次操作之后所有数乘积最大是多少?

对于样例:可以先选择一个$1$将其变成$2$,再选择一个$1$将其变成$2$,这样所有数的乘积为$4$。

输入格式

输入第一行为两个数$n,m$。

接下来一行$n$个数$a_i$,表示数组中的数的初始值。

输出格式

输出最大乘积模$10^9+7$的结果。

假设一个长度为$n$的序列,输出所有数乘积模$10^9+7$的结果可以参考下面的程序:

typedef long long ll;
const ll mod=1e9+7;
ll ans=1;
int n;
for (int i=0;i<n;i++) {
    ans=(ans*a[i])%mod;
}
ans=(ans+mod)%mod;
cout<<ans<<endl;

样例

Input
4 2
1 1 1 1
Output
4

提示

对于$33\%$的数据,满足$1 \leq n,m \leq 13, 0 \leq a_i \leq 10$。

对于$67\%$的数据,满足$1 \leq n,m \leq 10^3, 0 \leq a_i \leq 10^6$。

对于$100\%$的数据,满足$1 \leq n,m \leq 10^6, 0 \leq a_i \leq 10^6$。

不限期开放

题目列表