import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        long k = sc.nextLong();
        long x = sc.nextLong();
        
        if (n > k) {
            System.out.println(-1);
            return;
        }
        
        long minLen = (n - 1) * x + 1;
        if (k < minLen) {
            System.out.println(-1);
            return;
        }
        
        long maxLen = (n + 1) * x - 1;
        if (k > maxLen) {
            System.out.println(-1);
            return;
        }
        
        long rem = k - minLen;
        long leftGap = 0;
        long rightGap = rem;
        
        if (rem > x - 1) {
            leftGap = rem - (x - 1);
            rightGap = x - 1;
        }
        
        long l = x - leftGap;
        long r = x * n + rightGap;
        
        System.out.println(l + " " + r);
    }
}

https://www.nowcoder.com/discuss/727521113110073344

思路:

  1. 输入处理:读取输入的三个整数n、k、x。
  2. 条件判断:如果n大于k,直接返回-1。计算最小可能长度和最大可能长度,如果k不在这个范围内,返回-1。
  3. 剩余长度计算:计算剩余长度rem,即k减去最小可能长度的剩余部分。
  4. 扩展分配:根据剩余长度分配左扩展和右扩展,确保左扩展和右扩展不超过x-1,并且区间的长度正好为k。
  5. 输出结果:构造区间的左端点l和右端点r,并输出。