求hack atcoder 的 e

学术版

```plain 5 5 -1 2 -3 4 -5 ``` ?
by installb @ 2020-07-06 11:13:22


```cpp #include<bits/stdc++.h> #define mod 1000000007 using namespace std; long long sum = 1; int a[200005],flag = 0; bool cmp(int a,int b) { return abs(a) > abs(b); } int main() { int n,k; scanf("%d%d",&n,&k); for(int i = 1;i <= n;i ++) { scanf("%d",&a[i]); if(a[i] > 0) flag = 1; } if(n == k) { long long sum = 1; for(int i = 1;i <= n;i ++) { sum = (sum * a[i]) % mod; } printf("%lld\n",sum); return 0; } sort(a + 1,a + n + 1,cmp); if(flag == 0) { long long sum = 1; for(int i = n;i >= n - k + 1;i --) { sum = (sum * a[i]) % mod; } printf("%lld\n",sum % mod); return 0; } int fs = 0; for(int i = 1;i <= k;i ++) { if(a[i] < 0) { fs ++; } } if(fs % 2 == 0) { for(int i = 1;i <= k;i ++) { sum = (sum * a[i]) % mod; } printf("%lld\n",sum % mod); } else { long long maxl = -mod; int pfs,pzs = 200005; for(int i = k;i >= 1;i --) { if(a[i] < 0) { pfs = i; break; } } for(int i = k + 1;i <= n;i ++) { if(a[i] > 0) { pzs = i; break; } } if(pzs != 200005) { for(int i = 1;i <= k;i ++) { if(i == pfs) { sum = (sum * a[pzs]) % mod; } else { sum = (sum * a[i]) % mod; } } maxl = max(maxl,sum % mod); } pfs = pzs = 200005; sum = 1; for(int i = k;i >= 1;i --) { if(a[i] > 0) { pzs = i; break; } } for(int i = k + 1;i <= n;i ++) { if(a[i] < 0) { pfs = i; break; } } if(pfs != 200005 && pzs != 200005) { for(int i = 1;i <= k;i ++) { if(i == pzs) { sum = (sum * a[pfs]) % mod; } else { sum = (sum * a[i]) % mod; } } maxl = max(maxl,sum % mod); } printf("%lld\n",maxl); } return 0; } ```
by shitbro @ 2020-07-06 11:14:48


@[installb](/user/31440) 现在对了
by shitbro @ 2020-07-06 11:15:20


|