正负分开
都按照负数的话可以以绝对值从大到小排序,省点事
#include<iostream> #include<algorithm> #include<vector> #include<map> #include<string> #include<set> using namespace std; vector<int> pcoup,ncoup,pprod,nprod; int main(){ int nc,np; cin>>nc; for(int i = 0; i < nc; i++){ int temp; scanf("%d",&temp); if(temp > 0){ pcoup.push_back(-temp); } else if(temp < 0){ ncoup.push_back(temp); } } cin>>np; for(int i = 0; i < np; i ++){ int temp; scanf("%d",&temp); if(temp > 0){ pprod.push_back(-temp); } else if(temp < 0){ nprod.push_back(temp); } } sort(pcoup.begin(),pcoup.end()); sort(ncoup.begin(),ncoup.end()); sort(pprod.begin(),pprod.end()); sort(nprod.begin(),nprod.end()); int i = 0; int sum = 0; while(i < pcoup.size() && i < pprod.size()){ sum += pcoup[i] * pprod[i]; i++; } i = 0; while(i < ncoup.size() && i < nprod.size()){ sum += ncoup[i] * nprod[i]; i++; } printf("%d",sum); return 0; }