#include<bits/stdc++.h>
#define int long long
#define p 1000000009
using namespace std;
int n,k,a[100005];
int ans=1,flag=1;
signed main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
if(n%2==1)
{
ans=a[n];
n--;
k--;
if(ans<0)
flag=-1;
}
int front=1,tail=n;
while(k!=0)
{
int x=a[front]*a[front+1],y=a[tail]*a[tail-1];
if(x*flag>y*flag)
{
ans=x%p*ans%p;
front+=2;
}
else
{
ans=y%p*ans%p;
tail-=2;
}
k-=2;
}
cout<<ans;
return 0;
}
已A,但不理解为什么以上这份代码会re。
#include<bits/stdc++.h>
#define int long long
#define p 1000000009
using namespace std;
int n,k,a[100005],ans,flag;
signed main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
ans=k&1?a[n]:1;
n-=k&1;
k-=k&1;
int l=1,r=n;
flag=ans<0?-1:1;
while(k!=0)
{
int x=a[l]*a[l+1],y=a[r]*a[r-1];
if(x*flag>y*flag)
{
ans=x%p*ans%p;
l+=2;
}
else
{
ans=y%p*ans%p;
r-=2;
}
k-=2;
}
cout<<ans;
return 0;
}
而这么写却AC,求大佬解惑