zadanie podciągi

0

Mamy dane ciąg liczb naturalnych a = a1,a2,...,an oraz liczbę naturalną m. W ilu spójnych (tj. jedno kawałkowych) podciągach
ciągu a suma elementów jest podzielna przez m?
Podciągi uznajemy za rożne, jeżeli ich umiejscowienia w ramach ciągu a są rożne. W szczególności, przykładem spójnego podciągu ciągu a jest (jeden jedyny) sześcioelementowy

(1 ≤ n ≤ 1000000, 2 ≤ m ≤ 1000000) i (0 ≤ ai ≤ 1000000000),

 #include <cstdio>
using namespace std;
 
long long a,b,x,sum=0,tab[1000001]={0},l=1;
 
int main()
{
    scanf("%lld%lld",&a,&b);
    for(long long i=0;i<a;++i){
        scanf("%lld",&x);
        sum+=x;
        tab[i]=sum;
    }
    for(long long i=0;i<a;++i){
        for(int j=i;j<a;++j){
            if(i==0&&tab[j]%b==0)l++;
            if(i>0&&(tab[j]-tab[i-1])%b==0)l++;
        }
    }
    printf("%lld",l);
}

3 pierwsze testy wchodzą, ale potem w następnych 7 jest limit czasowy. Co tutaj zrobić? Należy jakoś podliczać już przy samym wprowadzaniu?

0
  1. Nadawaj sensowne nazwy zmiennym, nazwa l niejednokrotnie się zemści.
  2. Wygląda na to że nie rozumiesz inkrementacji: http://4programmers.net/Forum/1101404
  3. Zapoznaj się z arytmetyką mod
  4. Wymyśl algorytm programowania dynamicznego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1