Cicla e moltiplica

stavo cercando di risolvere il problema “cicla e moltiplica”, con c++, visto che sono nuovo al linguaggio e devo ancora prenderci la mano.
Provando i casi di test mi vengono perfetti, ma dopo aver consegnato il problema mi viene 0/100. Qualcuno può aiutarmi a capire il perché?

#include <vector>
#include <iostream>
using namespace std;

vector<int> execute(int N, int K, int D, vector<int> A) {
    vector<int> B(N);
    int temp;
    for(int j = 0; j < N;j++){
      B[j] = 1;
    }
    for(int i = 1; i <= K; i++ ){
      for(int j = 0; j < N;j++){
          B[j] *= A[j];
        }
      for(int l = D; l > 0; l --){
        for(int k = N-1; k > 0; k--){
          temp = A[k];
          A[k] = A[k-1];
          A[k-1] = temp;
        }
      }
    }
    for(int b = 0; b < N; b++){
      B[b] = B[b]%1000000007;
    }
    return B;
}

Ti segnalo un paio di problemi:

Se guardi quanto sono grandi i numeri in input, ti accorgi che il numero di operazioni che fa la tua soluzione é troppo grande. Se guardi la sottoposizione dovresti ricevere il verdetto “time limit exceeded”. Ti invito a pensare ad un approccio più efficiente

Con tutti i prodotti che vengono fatti, ridurre in modulo alla fine non é sufficiente, ma il risultato di ogni operazione deve essere ridotto in modulo.

2 Mi Piace

Nel cercare di dare un contributo per questo tipo di task se guardi i vari subtask puoi notare che uno riporta D = 0, e vale oltretutto 40 punti, quindi non devi fare alcun shift per il nuovo vettore.
Per risolvere il subtask in questione ti è utile, per rimanere nei tempi stabiliti, la fast modular exponentiation un algotimo che può servire anche in altri tasks.
Da questo, analizzando il comportamento dello shift, puoi provare a risolvere anche gli altri subtasks.