列表

详情


NC235687. 交替加乘

描述

有一个长度  的数组 ,可以对数组  进行任意排列。问:经过排列后,数组  进行"交替加乘”运算得到最大的结果是多少。

“交替加乘”运算规则: 和  相加,相加后结果乘以 ,相乘后结果再加上 ,相加后结果乘以 ,以此类推直到 

数组  长度为  ,计算如:

数组  长度为  ,计算如:

取模前的最大结果,输出对  取模。

输入描述

第一行包括一个整数  ,表示数组的长度。

第二行包括  个整数,分别表示  。

输出描述

输出一行,包含一个整数,表示  。

示例1

输入:

3
3 2 2

输出:

12

说明:

取得最大结果的数组  一种排列为 ,最大结果是 ,对  取模,输出 

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3 解法, 执行用时: 190ms, 内存消耗: 16332K, 提交时间: 2022-04-22 21:07:40

n = int(input())
s = input().split()
arr = []
mod = 10**9+7
for i in range(0,n):
    arr.append(int(s[i]))
arr.sort()
ret = arr[n//2]
i = n//2-1
j = n//2+1
while i>=0 or j<n:
    if i >= 0:
        ret+=arr[i]
        ret%=mod
    if j < n:
        ret*=arr[j]
        ret%=mod
    i-=1
    j+=1
print(ret)

C++(clang++ 11.0.1) 解法, 执行用时: 57ms, 内存消耗: 856K, 提交时间: 2022-10-14 21:20:34

#include<bits/stdc++.h>
using namespace std;
int main(){
	int mod=(int)1e9+7;
	int a;
	cin>>a;
	int b[100008];
	for(int i=0;i<a;i++){
		cin>>b[i];
	}
	sort(b,b+a);
	long long sum=b[a/2];
	for(int i=a/2-1,j=a/2+1;i>=0;i--,j++){
		sum+=b[i];
		if(j<a) sum*=b[j];
		sum%=mod;
	}
    cout<<sum<<endl;
} 

上一题