1 条题解
-
0
题目 A. Race 详细题解
题目重述
- Alice 从点 出发。
- 奖品可能出现在点 或点 ( 两两不等)。
- Bob 可以选择任意一个整数起点(不能选 ),目标是:
- 无论奖品在 还是 ,Bob 到奖品的距离 严格小于 Alice 到奖品的距离。
- 距离定义为 。
核心思路
假设 (如果不满足,可以交换 和 的分析,因为题目对称)。
考虑 与 的相对位置,共有 种情况:
情况 1:
- 奖品在 时:
Alice 距离 ,Bob 若选 ,则距离 ,显然 成立。 - 奖品在 时:
Alice 距离 ,Bob 若选 ,则距离 。
因为 ,所以 恒成立。
因此 Bob 可以选择 点,保证获胜。
结论:YES
情况 2:
- 如果 Bob 选择 左边任意点 :
奖品在 时,Alice 距离 ,Bob 距离 (因为 ),Bob 输。 - 如果 Bob 选择 右边任意点 :
奖品在 时,Alice 距离 ,Bob 距离 (因为 ),Bob 输。
无论 Bob 怎么选,总有一个奖品位置让他输。
结论:NO
情况 3:
- 奖品在 时:
Alice 距离 ,Bob 若选 ,则距离 ,显然 成立。 - 奖品在 时:
Alice 距离 ,Bob 若选 ,则距离 。
因为 ,所以 恒成立。
因此 Bob 可以选择 点,保证获胜。
结论:YES
统一条件
注意观察:
- 当 在 和 同一侧时(即 或 ),答案为 YES。
- 当 在 和 之间时(即 ),答案为 NO。
等价判断:
若 和 同时为真,或同时为假,则输出 YES,否则 NO。
这正是标程中的一行判断:
cout << ((a < x) == (a < y) ? "YES" : "NO") << '\n';
完整证明
设 。
情况 条件 是否相等 结论 在最左 真 真 相等 YES 在中间 假 不等 NO 在最右 假 相等 YES
时间复杂度
每个测试用例 ,总复杂度 ,完美通过。
示例验证
输入:
3 1 3 4 5 3 1 3 1 5- 第1组:, 且 → 相等 → YES
- 第2组:,先排序为 ,? 假,? 假 → 相等 → YES
- 第3组:,? 假,? 真 → 不等 → NO
输出:
YES YES NO与题目样例完全一致。
- 1
信息
- ID
- 6345
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者