题解 | #阿宁的整数配对#

阿宁的整数配对

https://ac.nowcoder.com/acm/problem/247909

首先将整数从小到大排序,然后利用双指针求解:
#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;
}

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务