对数组a和b进行排序
为了尽可能满足条件,一定是把数组a的较大的值与数组b中较小的值进行配对,数组a中较小的值与数组b中较大的值进行配对。
因此排序之后,按照上述方式去检查每一个位置i是否满足条件即可
O(nlogn)
C++
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int a[505], b[505];
void solve() {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        scanf("%d", a + i);
    }
    for (int i = 1; i <= n; i++) {
        scanf("%d", b + i);
    }
    sort(a + 1, a + 1 + n);
    sort(b + 1, b + 1 + n);
    for (int i = 1; i <= n; i++) {
        if (a[i] + b[n - i + 1] > m || a[i] + b[n - i + 1] < 1) {
            puts("No");
            return;
        }
    }
    puts("Yes");
}
int main() {
    int t = 1;
    cin >> t;
    while (t--) solve();
    return 0;
}
python代码
q = int(input())
for _ in range(q):
    n, m = [int(i) for i in input().split()]
    nums1 = [int(i) for i in input().split()]
    nums2 = [int(i) for i in input().split()]
    nums1.sort()
    nums2.sort(reverse=True)
    for i in range(n):
        if not( 1 <= nums1[i] + nums2[i] <= m ):
            print("No")
            break
    else:
        print("Yes")
Java代码
import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int q = in.nextInt();
        while(q-- > 0){
            int n = in.nextInt();
            int m = in.nextInt();
            int[] a = new int[n], b = new int[n];
            for (int i = 0; i < n; i++) {
                a[i] = in.nextInt();
            }
            for (int i = 0; i < n; i++) {
                b[i] = in.nextInt();
            }
            Arrays.sort(a);
            Arrays.sort(b);
            boolean flag = true;
            for (int i = 0; i < n; i++) {
                int cur = a[i] + b[n - i - 1];
                if(cur > m || cur < 1){
                    flag = false;
                    break;
                }
            }
            System.out.println(flag ? "Yes" : "No");
        }
    }
}
        q次询问,每次给定两个数组a,b , 问你是否存在一种排列情况使得重排数组a,b 之后每个i∈[1,n] 都能满足1≤ai+bi≤m
第一行输入一个整数q(1≤q≤30)
接下来q组,对于每组:
第一行两个整数n(1≤n≤500),m(1≤m≤500)
第二行n个整数a1,a2,...,an
第二行n个整数b1,b2,...,bn
−500≤ai,bi≤500
输出q行,每一行如果能够满足条件,输出一个"Yes" ,否则输出"No" (不含双引号)
输入
2
5 3
-1 -2 3 4 5
-1 3 4 2 5
5 6
-1 -2 3 4 5
-1 3 4 2 5
输出
No
Yes