首先,对原有序列进行排序更加便于计算。
其次,通过一般规律发现普遍规律:
1 2 3 4 5
1 2 3 1 20第一次
1 2 1 1 60第二次
在这种情况下,最后数组元素的总和最大。代码如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
long long int a,b,sum=0,n=1e9+7;
cin>>a>>b;
long long int s[1000000];
for(int i=0;i<a;i++){
cin>>s[i];
}
sort(s,s+a); // 对数组进行排序,以便后续操作
for(int i=a-1;i>a-b-1;i--){
s[i-1]*=s[i]%n; // 将当前元素的前一个元素乘以当前元素
s[i]=1; // 将当前元素设为1,实现替换操作
}
for(int i=0;i<a;i++){
sum+=s[i]%n; // 计算数组元素的总和
}
sum=sum%n; // 对总和取模
cout<<sum; // 输出结果
}