这个问题首先我们不能用暴力去做,那么我们就去分析一下这个题的规律,我首先把前八项乘开观察一下, A1×A3×A5×A7+A2×A3×A5×A7+A4×A5×A7+A6×A7+A8。我们拆开之后可以观察一下,发现每一项都乘以了奇数项,并且最后一个奇数项A7乘的最多次,那么我们就在想,是不是可以把A1-A7的奇数项进行正向排序,这样我们的可以保证最大值,这个地方可以用不等式证明,之后就是偶数项,每一项都有一个偶数项(第一项可以当作A0=1)那么我们会发现A2乘的数最大,那么我们就保证最大的永远大就行了,可以让偶数项序列倒序排列,那根据价值,我们把8个数中最大的4个分别放在A1 A3 A5 A7中,剩下四个放在偶数项中,然后计算一遍即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll a[100005];
ll b[100005];
ll c[100005];
bool cmp(ll a,ll b)
{
return a>b;
}
int main()
{
int n;
cin>>n;
ll res=1;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+1+n);
int k=n/2;
for(int i=1;i<=k;i++)
{
b[i]=a[i];
}
for(int i=k+1;i<=n;i++)
{
c[i-k]=a[i];
}
sort(b+1,b+k+1,cmp);
int cnt1=1,cnt2=1;
for(int i=1;i<=n;i++)
{
if(i%2)
{
res*=c[cnt1++]%mod;
res%=mod;
}
else
{
res+=b[cnt2++]%mod;
res%=mod;
}
}
cout<<res;
}