1 条题解
-
0
Written by @Yue_chen
题意:
给定一个长度为 n 的数组。
你可以选择任意 k 个数(每个数只能用一次)相乘后放回原数组。
求原数组最大值。
思路:
排序后。
如果最大的 k 个数中有 0 直接数组目前数组最大的数。
否则,输出最大的 k 个数之积。
时间复杂度O(nlog2n)
AC代码:
#include<bits/stdc++.h> using namespace std; using i64 = long long; constexpr int M=998244353; void solve() { int n, k; cin>>n>>k; vector<i64> a(n+1); for(int i=1; i<=n; ++i){ cin>>a[i]; } sort(a.begin()+1, a.end()); i64 ans = 1; for(int i=n; i>n-k; --i) { if(a[i] == 0) { cout<<a[n]%M<<"\n"; return ; } ans = ans * a[i]%M; } cout<<ans<<"\n"; } signed main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); int t=1; //cin>>t; while (t--) solve(); return 0; }
- 1
信息
- ID
- 122
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 246
- 已通过
- 27
- 上传者