http://acm.hrbeu.edu.cn/index.php?act=problem&id=1211
题意:
题解:
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n , k , m , T;
int a[10010] , b[10010];
int main() {
scanf("%d" , &T);
while(T--) {
scanf("%d%d",&n,&k);
k = n * n - k + 1;
for(int i=0;i<n;i++) scanf("%d" , &a[i]);
for(int i=0;i<n;i++) scanf("%d" , &b[i]);
sort(a , a+n); sort(b , b+n);
int l = a[0] * b[0] , r = a[n-1] * b[n-1];
while(l <= r) {
m = (l+r) >> 1;
int sum = 0;
for(int i=0;i<n;i++) {
int mm , ll = 0 , rr = n-1;
while(ll <= rr) {
mm = (ll + rr) >> 1;
if(a[i] * b[mm] > m) rr = mm - 1;
else ll = mm + 1;
}
sum += ll;
if(sum > k) break;
}
if(sum >= k) r = m - 1;
else l = m + 1;
}
printf("%d\n" , l);
}
return 0;
}