解题思路: 按从小到大排序
分为两种情况:
第一种: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 人评分
C语言程序设计教程(第三版)课后习题8.3 (Java代码)浏览:1365 |
C二级辅导-同因查找 (C语言代码)浏览:579 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1026 |
WU-蓝桥杯算法提高VIP-交换Easy (C++代码)浏览:1107 |
简单的a+b (C语言代码)浏览:568 |
蓝桥杯历届试题-翻硬币 (C++代码)浏览:871 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:642 |
简单的a+b (C语言代码)浏览:579 |
简单的a+b (C语言代码)浏览:462 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:604 |