c++程序运行时超时

各位请问这里为什么超时?

鸡蛋
一天白雪公主来到超市为七个小矮人买鸡蛋,这里的鸡蛋都包装在篮子里,每个篮子的鸡蛋数都不相同。这些篮子排成一行,白雪公主要买其中连续的一段。不过为了每个小矮人分的鸡蛋数一样,有一个条件:这连续一段篮子的鸡蛋数的和要能被7整除。
现在知道n个篮子的每一个里面鸡蛋数,问白雪公主有多少种购买方案?

#include 
using namespace std;
int a[100005]
int main()
{
    int N,i,j,k,sum=0,count=0;
    scanf("%d",&N);
    for(i=0;i<N;i++)
        scanf("%d",&a[i]);
    for(i=1;i<N;i++)
    {
        for(j=0;j<N-i+1;j++)
        {
            sum = 0;
            for(k=j;ksum+=a[k];
            if(sum%7==0)
                count++;
        }
    }
    printf("%d",count);
    return 0;
}

一共四个测评点,3个没错,一个超时。

给个样例啊,再说,三个循环嵌套着,n是1000的话,就一定超时了
我找到了范围,是100000。

img

参考程序:

#include <stdio.h>
#define MAX_N 100000
using namespace std;
int n;
int a[MAX_N + 5];
int c[7];
long long ans;

inline long long C(long long x)
{
    return x * (x + 1) >> 1;
}

int main()
{
    scanf("%d",&n);
    for(register int i = 1; i <= n; ++i)
    {
        scanf("%d",&n);
        a[i] = (a[i] + a[i - 1]) % 7;
        ++c[a[i]];
    }
    for(register int i = 0; i < 7; ++i) 
    {
        ans += C(c[i] - (i > 0));
    }
    printf("%d",ans);
    return 0;
}

三个for循环嵌套,时间复杂度有点高了

两重循环

int a[100005];
int main()
{
    int N,sum=0,count=0,i=0,j=0;
    scanf("%d",&N);
    for(i=0;i<N;i++)
        scanf("%d",&a[i]);
    for(i=0;i<N;i++)
    {
        sum = 0;
        for(j=i;j<N;j++)
        {
            sum += a[j];
            if(sum%7==0)
                count++;
        }
    }
    printf("%d\n",count);
    return 0;
}