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,并输出。



京公网安备 11010502036488号