1 条题解
-
0
这是一道思维题。题目要求我们构造一个不重复的奇数数列,并且数列之和不超过 ,输出最大的长度。
贪心思路:给定了数列之和,要使得长度最大,我们数列里的数就要越小越好,即从最小的正奇数 开始。
我们很容易观察出来这个是以 为公差的递增等差数列,所以前 项和公式为:
将 带入上式可得:
所以我们所求答案为:
注意最后 应该是整数。
参考代码:
#include <bits/stdc++.h> using u32 = unsigned; using i64 = long long; using u64 = unsigned long long; using u128 = unsigned __int128; void solve() { int n; std::cin >> n; std::cout << (int)std::sqrt(n) << "\n"; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t; std::cin >> t; while (t --) { solve(); } return 0; }
- 1
信息
- ID
- 150
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 49
- 已通过
- 17
- 上传者