题目:Magic Coupon
我的代码
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(int a,int b){
if(a < 0 && b < 0) return a < b;
else return a > b;
}
int main(){
vector<long>a;
vector<long>b;
int na,nb; //a,b数组的长度
long long sum = 0; //最后能获得的金额
cin>>na;
for(int i = 0;i < na;i++) {
long t;
cin>>t;
a.push_back(t);
}
cin>>nb;
for(int i = 0;i < nb;i++) {
long t;
cin>>t;
b.push_back(t);
}
sort(a.begin(),a.end(),cmp); //注意sort用于vector时候的用法
sort(b.begin(),b.end(),cmp);
int pos = 0;
for(int i = 0;i < a.size();i++){
for(int j = pos;j < b.size();j++){
if(a[i] * b[j] > 0) {
sum += a[i]*b[j];
pos = j+1;
break;
}
}
if(pos == b.size()) break; //这里写成了= 表达式为真,一次就跳出了,注意这个
}
cout<<sum;
}
参考代码:
链接:https://www.nowcoder.com/questionTerminal/c5b8933f0b7545df82a9316384aecb33
来源:牛客网
#include <algorithm>
#include <iostream>
using namespace std;
bool cmp(long long a,long long b){
return a>b;
}
long long a[100010],b[100010],sum=0;
int main(){
int x,y;
cin>>x;
for(int i=0;i<x;i++) cin>>a[i];
cin>>y;
for(int i=0;i<y;i++) cin>>b[i];
sort(a,a+x,cmp);
sort(b,b+y,cmp);
int num=0,j=0,k=0;
while(a[j]>0&&b[k]>0&&num<=x&&num<=y){
sum+=a[j]*b[k];
num++;
j++;k++;
}
j=x-1;k=y-1;
while(a[j]<0&&b[k]<0&&num<=x&&num<=y){
sum+=a[j]*b[k];
num++;
j--;k--;
}
cout<<sum;
return 0;
}
收获:自己写的比较函数有点像冒泡时候改进版的两个for循环,但是参考代码里面的两个while写的更加直观。