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