1 条题解
-
0
题目分析
我们有一个序列: 我们要找最小的非负整数 ,使得存在某个 满足: 即:
设 ,则 ,于是: $ m = \frac{k/d + d}{2}, \quad n = \frac{k/d - d}{2} $ 要求:
- 整除
- (保证 )
- 与 同奇偶(保证 为整数)
特殊情况
- 当 时,只需枚举 从 到 。
- 当 时,令 ,方程变为: 设 ,则 ,于是: 要求 且同奇偶。
C++ 代码
#include <iostream> #include <cmath> using namespace std; int main() { long long k; cin >> k; if (k >= 0) { long long ans = -1; for (long long d = 1; d * d <= k; d++) { if (k % d == 0) { long long y = k / d; if ((y + d) % 2 == 0) { long long m = (y + d) / 2; if (ans == -1 || m < ans) { ans = m; } } } } if (ans != -1) { cout << ans * ans << endl; } else { cout << "none" << endl; } } else { long long t = -k; long long ans = -1; for (long long d = 1; d * d <= t; d++) { if (t % d == 0) { long long y = t / d; if ((y + d) % 2 == 0) { long long m = (y - d) / 2; if (m >= 0 && (ans == -1 || m < ans)) { ans = m; } } } } if (ans != -1) { cout << ans * ans << endl; } else { cout << "none" << endl; } } return 0; }
复杂度分析
- 时间复杂度:,对于 是可行的。
- 空间复杂度:。
样例验证
- 输入
0→ 输出0 - 输入
-5→ 输出4 - 输入
2→ 输出none
- 1
信息
- ID
- 3533
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者