解题思路:先排序在判断m的奇数或者偶数在利用类似双指针的想法

注意事项:

参考代码:

#include<bits/stdc++.h> 

using namespace std;

int groups;

int n,m;

long long result; 

int main()

{

   ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

   cin>>groups;

   for(int i=0;i<groups;i++)

   {

      cin>>n>>m; //n 个数//m乘个数 

      vector<int> arr(n);

      result=1;

      int j=0;

      while(n--) 

      {

        cin>>arr[j++];

      }

      sort(arr.begin(),arr.end());//排序 

     int size = min(m,(int)arr.size());//m可能大于n 

     // -3 -2 1 2 3 4    n=5 m=2  当m为偶数他可能是4个负数或者是4个正,反正一定偶数给负,我们直接双指针2端比较

     int left=0,right=arr.size()-1;

     if(m%2==1) //m为奇数时间一定会取最大的整数

     {

        result*=arr[right];

        m--;

        right--;

      }

      //偶数

      while(m>0) 

      {

         int leftpro=arr[left]*arr[left+1];//左边的乘

         int rightpro=arr[right] *arr[right-1];//右边的乘

         if(leftpro>rightpro) //2个复数大于2个正 

         {

            result*=leftpro; 

//            指针移动到后面2个位置

              left+=2; 


         }else{

            result*=rightpro;

            right-=2;

         }

         m-=2;

      }

      cout<<result<<endl;

   }

      

   return  0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论