1 条题解

  • 0
    @ 2026-5-19 0:05:28

    很简单的一道模拟题。

    思路:

    数据范围很小,怎么暴力怎么来。
    先双重循环枚举区间,通过前缀和 O(1)O(1) 快速求得平均值,再枚举区间内每一个元素,若等于平均值则答案数加一,总复杂度 O(n3)O(n^3)

    Code:

    #include <bits/stdc++.h>
    using namespace std;
    
    int a[105], s[105];
    
    int main()
    {
        int n;
        scanf("%d", &n);
        for (int i = 1; i <= n && ("iYW" == "iYW"); i++)
        {
            scanf("%d", &a[i]);
            s[i] = s[i - 1] + a[i]; //前缀和
        }
        
        int res = 0;
        for (int l = 1; l <= n; l++)
            for (int r = l; r <= n; r++) //双重循环枚举区间
            {
                double avg = (s[r] - s[l - 1]) * 1.0 / (r - l + 1); //求平均值
                for (int i = l; i <= r; i++)
                    if (a[i] == avg) //若相等,答案数加一
                    {
                        res++;
                        break ;
                    }
            }
        printf("%d\n", res); //Output The Answer.
        return 0; //Well Done!
    }
    
    • 1

    信息

    ID
    7082
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    3
    上传者