CF1833B

· · 题解

很显然,|a_i-b_i|\le k 这个条件是可以不要的,因为题目保证有解,所以只要我们找的是最优解就行了。

想要达到最优解,最简单的办法不就是两个数组排序然后找一下 a 数组排序之前的编号吗?然后就做完了噻。

上代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 100005;
int t, n, k;
struct node
{
    int id, x;
}a[N];
int b[N], c[N];
bool cmp(node x, node y)
{
    return x.x < y.x;
}
int main()
{
    cin >> t;
    while(t -- )
    {
        cin >> n >> k;
        for(int i = 1; i <= n; i ++ )
        {
            scanf("%d", &a[i].x);
            a[i].id = i;
        }
        for(int i = 1; i <= n; i ++ )
            scanf("%d", &b[i]);
        sort(a + 1, a + n + 1, cmp);
        sort(b + 1, b + n + 1);
        for(int i = 1; i <= n; i ++ )
            c[a[i].id] = b[i];
        for(int i = 1; i <= n; i ++ )
            cout << c[i] << " ";
        puts("");
    }
    return 0;
}