这是AC代码:
#include<bits/stdc++.h>
#define N 200005
#define int long long
using namespace std;
int n,m,p,a[N],b[N],s[N],ans;
signed main()
{
cin>>n>>m>>p;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
sort(b+1,b+m+1);
for(int i=1;i<=m;i++){
s[i]=s[i-1]+b[i];
}
for(int i=1;i<=n;i++){
int tmp=p-a[i];
int qian=upper_bound(b+1,b+m+1,tmp)-b-1;
ans+=s[qian]+a[i]*qian+p*(m-qian);
}
cout<<ans;
return 0;
}
那为什么把A和B互换就不对呢?
#include<bits/stdc++.h>
#define N 200005
#define int long long
using namespace std;
int n,m,p,a[N],b[N],s[N],ans;
signed main()
{
cin>>n>>m>>p;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
s[i]=s[i-1]+a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
for(int i=1;i<=m;i++){
int tmp=p-b[i];
int qian=upper_bound(a+1,a+n+1,tmp)-a-1;
ans+=s[qian]+b[i]*qian+p*(m-qian);
}
cout<<ans;
return 0;
}