事件推送
标题:事件推送 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
同一个数轴X上有两个点的集合A={A1, A2, …, Am}和B={B1, B2, …, Bn},Ai和Bj均为正整数,A、B已经按照从小到大排好序,A、B均不为空,给定一个距离R(正整数),列出同时满足如下条件的所有(Ai, Bj)数对:
1)Ai <= Bj
2)Ai, Bj之间的距离小于等于R
3)在满足1)2)的情况下,每个Ai只需输出距离最近的Bj
1)Ai <= Bj
2)Ai, Bj之间的距离小于等于R
3)在满足1)2)的情况下,每个Ai只需输出距离最近的Bj
4)输出结果按Ai从小到大的顺序排序
#include <vector>
#include <utility>
#include <string>
#include <iostream>
using namespace std;
int main()
{
long long m,n,R;
cin >> m >> n >> R;
vector<long long >A_array(m,0);
vector<long long >B_array(n,0);
for (long long i = 0; i<m; i++)
{
cin >> A_array[i];
}
for (long long i = 0; i<n; i++)
{
cin >> B_array[i];
}
long long int_a = 0;
long long int_b = 0;
vector<pair<long long , long long >> ans;
while(int_a < m && int_b < n){
if(A_array[int_a] <= B_array[int_b]){
if(B_array[int_b] - A_array[int_a] <= R){
ans.emplace_back(A_array[int_a], B_array[int_b]);
}
int_a = int_a + 1;
} else{
int_b = int_b + 1;
}
}
for(int i = 0; i < ans.size(); i++){
printf("%lld %lld\n", ans[i].first, ans[i].second);
}
}
