给定 N 个整数 A1,A2,…AN。
请你从中选出 K 个数,使其乘积最大。
请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以 1000000009 的余数。
注意,如果 X<0, 我们定义 X 除以 1000000009 的余数是负(−X)除以 1000000009 的余数,即:0−((0−x)%100000009
#include <iostream>
#define shu 1000000009
using namespace std.
int main()
{
long long a[1e6+10],n,k,x,y,res;
int i,t=1;
cin>>n>>k;
int c = 0,d = n-1;
for(i = 0;i < n;i++)
{
cin>>a[i];}
if(k%2==0)
{
res = a[d--];
k=k-1;
if(res<0)
t = -1;
}
while(k!=0)
{
x=a[c]*a[c+1];
y=a[d]*a[d-1];
if(x*t>y*t){
res=((x % shu)*(res % shu));
c = c+2;
}
else{
res=((y % shu)*(res % shu));
d = d-2;
}
k-=2;
cout << res <<endl;
return 0;
}