题目描述
给你两个数组a,b,长度分别为n,m,同时给你一个整数k,对于任意的i,j如果k <= a[i] *b[j]称为一个成功的匹配,请问有多少个不同的成功匹配
a,b数组所有元素均是整数
输入
第一行两个整数n,m表示两个数组的长度,第二行输入a数组,第三行b数组,第四行k
n,m <=1e5
k <= 1e10
1<=数组元素值<=1e9
输出
一个整数,成功匹配的个数
样例输入 Copy
3 5
5 1 3
1 2 3 4 5
7
样例输出 Copy
7
代码
#include<bits/stdc++.h>
#define ll long long
const int N=1e5+10;
using namespace std;
ll a[N],b[N],i,j,k,n,m;
int main(){
cin>>n>>m;
for(i=0;i<n;i++)cin>>a[i];
for(j=0;j<m;j++)cin>>b[j];
cin>>k;
sort(a,a+n);
sort(b,b+m);
ll l=0,r=m-1,mid,ans=0;
for(i=0;i<n;i++){
l=0,r=m-1;
bool flag=1;
while(l<=r){
mid=(l+r)/2;
if(a[i]*b[mid]<k)l=mid+1;
else if(a[i]*b[mid]>=k&&a[i]*b[mid-1]>=k){
r=mid-1;
}
else{
int tmp=b[mid];
while(1){
if(b[mid-1]==tmp)mid--;
else break;
}
ans+=m-mid;
break;
}
}
}
cout<<ans<<endl;
return 0;
}