1. 注意初始化条件
  2. 注意怎么算排列数的
  3. 注意 int 溢出
  4. 就按题目说的,每个位置应该是什么,找出有多少个符合条件的,A(所有大于x的,需要大的位置数),A(所有小于x的,需要大的位置数),A(剩下的,剩下的),乘起来就行了。
    private static final int MOD = (int) (1e9 + 7);

    public static void solve(Kattio kattio) {
        int n = kattio.nextInt();
        int x = kattio.nextInt();
        int pos = kattio.nextInt();
        int greater = n - x;
        int smaller = x - 1;
        int g = 0;
        int s = 0;
        int l = 0;
        int r = n;
        while (l < r) {
            int mid = l + (r - l) / 2;
            if (mid <= pos) {
                s++;
                l = mid + 1;
            } else {
                g++;
                r = mid;
            }
        }
        s--;
        long res = A(smaller, s) * A(greater, g) % MOD * A(n - s - g - 1, n - s - g - 1) % MOD;
        kattio.println(res);
    }

    public static long A(int n, int m) {
        if (m > n) {
            return 0;
        }
        long res = 1;
        for (int i = 0; i < m; i++) {
            res = res * n % MOD;
            n--;
        }
        return res;
    }