分析
代码
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define LL long long
const int mod=1000000009;
int g[100005];
int main(){
int n,k;
cin >> n >> k;
int res=1;
for(int i=0;i<n;i++){
cin >> g[i];
}
int sign=1;
sort(g,g+n);
int L=0;int R=n-1;
if(k%2){//如果k是奇数的话
res=g[R--];//取一个最左边的数
if(res<0)sign=-1;//并且sign=-1,用来表示第三种情况,作用是为了取后面x,y中最小的
k--;
}
while(k){
LL x=(LL)g[L]*g[L+1];LL y=(LL)g[R]*g[R-1];
if(x*sign>y*sign){
res=x%mod*res%mod;
L+=2;
}else{
res=y%mod*res%mod;
R-=2;
}
k-=2;
}
cout << res;
}