首先将整数从小到大排序,然后利用双指针求解:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
int a;
int f[201];
memset(f,0,sizeof(f));
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a;
if(a==0) f[100+a]++;
else if(a<0) f[100+a]++;
else if(a>0) f[100+a]++;
}
int A[200000];
int p=0,q=0;
while(p!=201)
{
if(f[p]!=0)
{
for(int i=q;i<q+f[p];i++)
A[i]=p-100;
q=q+f[p];
}
p++;
}
int i=0,j=n-1;
long long int m=0;
while(k!=0)
{
int m1=A[i]*A[i+1],m2=A[j]*A[j-1];
if(m1>m2) {m+=m1;i+=2;}
else {m+=m2;j-=2;}
k--;
}
cout<<m<<endl;
return 0;
}
using namespace std;
int main()
{
int n,k;
int a;
int f[201];
memset(f,0,sizeof(f));
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a;
if(a==0) f[100+a]++;
else if(a<0) f[100+a]++;
else if(a>0) f[100+a]++;
}
int A[200000];
int p=0,q=0;
while(p!=201)
{
if(f[p]!=0)
{
for(int i=q;i<q+f[p];i++)
A[i]=p-100;
q=q+f[p];
}
p++;
}
int i=0,j=n-1;
long long int m=0;
while(k!=0)
{
int m1=A[i]*A[i+1],m2=A[j]*A[j-1];
if(m1>m2) {m+=m1;i+=2;}
else {m+=m2;j-=2;}
k--;
}
cout<<m<<endl;
return 0;
}