专栏文章
题解:P14495 [NCPC 2025] Arithmetic Adaptation
P14495题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min8qpk4
- 此快照首次捕获于
- 2025/12/01 22:24 3 个月前
- 此快照最后确认于
- 2025/12/01 22:24 3 个月前
题目分析
本题核心是构造两个非零三位数(范围 ) 和 ,使得 。题目不要求唯一解,只需输出任意一组合法答案,因此无需枚举所有可能,直接构造即可。
解题思路
构造思路的核心是“固定一个数,计算另一个数”,优先选择简单的固定值减少判断逻辑:
- 优先固定 ,计算 。
- 检查 是否合法:非零且在 范围内。
- 若 合法,直接输出 和 ;若不合法(仅两种情况: 或 ),则固定 ,计算 ,此时 必合法。
合法性证明
- 当 时, 不合法的情况:
- → ,此时 时 (非零且在范围)。
- → ,此时 时 (非零且在范围)。
- 其他所有情况, 对应的 均合法( 最大为 999, 最大为 998,不超范围)。
代码实现
CPP#include <iostream>
using namespace std;
int main() {
// 读取题目给定的和 s
int s;
cin >> s;
// 构造思路:优先选择简单的 a=1(非零、三位数范围内),计算对应的 b
int a = 1;
int b = s - a; // 根据 a + b = s 推导,b = s - a
// 检查 b 是否满足所有条件:
// 1. b != 0:题目要求 b 非零
// 2. b >= -999 且 b <= 999:题目要求 b 是三位数(含负三位数)
if (b != 0 && b >= -999 && b <= 999) {
// 若 b 合法,直接输出 a 和 b
cout << a << " " << b << endl;
} else {
// 当 a=1 时 b 不合法(仅两种情况:b=0 或 b<-999)
// 更换构造的 a 为 -1(同样满足非零、三位数范围)
a = -1;
// 重新计算合法的 b:b = s - a = s - (-1) = s + 1
b = s - a;
// 此时 b 必合法:
// - 若之前 b=0(即 s=1),则当前 b=1+1=2(非零、在范围内)
// - 若之前 b<-999(即 s<-998),则当前 b=s+1 >= -999(非零、在范围内)
cout << a << " " << b << endl;
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...