定义一种特殊的整数序列,这种序列由连续递增的整数组成,并满足以下条件:

    序列长度至少为3。
    序列中的数字是连续递增的整数(即相邻元素之差为1),可以包括正整数、负整数或0。

        例如,[1,2,3]、[4,5,6,7] 和 [−1,0,1] 是符合条件的序列,而 [1,2](长度不足)和[1,2,4](不连续)不符合要求。
        现给定一组包含N 个正整数的数据A1,A2,…,AN。如果某个 Ai 能够表示为符合上述条件的连续整数序列中所有元素的和,则称Ai是可分解的。请你统计这组数据中可分解的正整数的数量。

输入格式

共两行。

    第一行包含一个正整数 N,表示数据的个数。

    第二行包含 N 个正整数 A1,A2,…,AN,表示需要判断是否可分解的正整数序列。

输出格式

    输出一行一个整数,表示给定数据中可分解的正整数的数量。

样例输入

    3
    3 6 15

样例输出

3

数据规模

    1≤N≤10^5,1≤Ai≤10^9。

方法思路

  1. 问题分析:通过数学推导,我们发现只要正整数不等于1,总能找到一种分解方式使其满足条件。因此,只需统计输入中不等于1的数的个数。

  2. 时间复杂度:由于只需遍历数组一次,时间复杂度为O(N),适用于题目给定的数据规模。

  3. 空间复杂度:仅需常数空间,空间复杂度为O(1)。

代码

#include <bits/stdc++>
using namespace std;
int main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n;
    cin >> n;
    int count = 0;
    for (int i = 0; i < n; ++i) {
        int a;
        cin >> a;
        if (a != 1) {
            ++count;
        }
    }
    cout << count << '\n';
    return 0;
}

代码解释

  1. 输入处理:使用ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)加快输入速度。

  2. 遍历输入:逐个读取每个数,判断其是否等于1。若不为1,则计数器加1。

  3. 输出结果:最后输出计数器的值,即符合条件的正整数数量。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐