HzuHtx


私信TA

用户名:hetangxin123

访问量:41040

签 名:

私はいつまでもレムが好きです。

等  级
排  名 29
经  验 14144
参赛次数 10
文章发表 76
年  龄 0
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

写不动,根本写不动

解题思路:   按从小到大排序

                    分为两种情况:

                        第一种:m为偶数, 取2k个正数和n-2k个负数,依次比较, 取最大值即可

                        第二种:m为正数,去2k+1个整数和n - (2k+1)个负数,依次比较,取最大值即可


参考代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 7;
int a[MAXN];
int main() {
	int t, n, m;
	cin >> t;
	while(t--) {
		scanf("%d%d", &n, &m);
		for(int i = 1; i <= n; ++i)	scanf("%d", &a[i]);
		sort(a + 1, a + n + 1);
		long long maxx = -1e9;
		if(m % 2 == 0) {
			for(int i = 0; i <= m; i += 2) {
				long long ans = 1;
				for(int j = 1; j <= i; ++j) ans *= a[j];
				for(int j = n; j > n - m + i; --j) ans *= a[j];
				maxx = max(maxx, ans);
			}
		}
		else {
			for(int i = 1; i <= m; i += 2) {
				long long ans = 1;
				for(int j = n; j > n - i; --j)	ans *= a[j];
				for(int j = 1; j <= m - i; ++j)	ans *= a[j];	
				maxx = max(maxx, ans);
			}
		}
		cout << maxx << endl;
	}
	return 0;
}


 

0.0分

6 人评分

  评论区