1 条题解

  • 0
    @ 2024-12-24 1:26:34

    这是一道思维题。题目要求我们构造一个不重复的奇数数列,并且数列之和不超过 SS,输出最大的长度。

    贪心思路:给定了数列之和,要使得长度最大,我们数列里的数就要越小越好,即从最小的正奇数 11 开始。

    1,3,5,7,9,1,3,5,7,9,\cdots

    我们很容易观察出来这个是以 22 为公差的递增等差数列,所以前 nn 项和公式为:

    S=a1n+n(n1)2dS=a_1n+\frac{n(n-1)}{2}d

    S,a1=1,d=2S,a_1=1,d=2 带入上式可得:

    S=n2S=n^2

    所以我们所求答案为:

    n=Sn=\sqrt S

    注意最后 nn 应该是整数。

    参考代码:

    #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
    上传者