Shiftmul errore output e tempo


Mi da giusto solo i subtasks 1 cioè i casi d’esempio, non capisco perché mi sembrano giuste le operazioni

Ma ti da errore perché l’output è sbagliato (Output isn’t correct) o perché va fuori tempo limite (Execution timed out)?
Perché il ragionamento potrebbe anche essere giusto ma forse è troppo lento.

EDIT: Un consiglio, se dovessi postare altro codice sui forum ti conviene non allegare un immagine ma incollare il codice formattandolo come spiegato al punto 2 di questo post (Come chiedere aiuto sul forum).

Mi da nel subtask 2 output isn’t correct e negli altri execution timed out

EDIT: Questo commento è sbagliato, ignoratelo pure, come ha fatto notare anche fve5 non avrei dovuto provare ad aiutare a risolvere un problema che non ho già risolto io…

La risposta originale (sbagliata) era:
“La subtask 2 ti potrebbe dare output non corretto perché ogni volta che moltiplichi B[i] per A[i] salvi in B[i] il modulo del risultato di B[i]*A[i] e di mod, mentre la consegna ti chiede di farlo solo una volta alla fine e non K volte.
In quanto alle execution timed out io personalmente non ho risolto questo problema ma probabilmente c’è un pattern o qualcosa di simile che ti permette di risolvere il problema facendo meno operazioni visto che la complessità del tuo algoritmo è O(KDN).”

È abbastanza intuitivo (e in ogni caso verificabile con 30 secondi di conti) che somma, differenza e moltiplicazione si comportano bene sotto qualunque modulo, cioè che il risultato di una di queste operazioni dipende solo dal valore in modulo dei due operandi.
Peraltro, come ho già fatto notare in passato, la riduzione in modulo non è una richiesta stravagante da parte dell’autore, ma la risposta alla necessità di lavorare con numeri piccoli in problemi in cui le quantità possono diventare enormi. Ridurre sotto modulo dopo ogni operazione è sempre la cosa giusta da fare in questi casi.

Idealmente sarebbe il caso di non cercare di fornire aiuto circa problemi che non si sa risolvere, il rischio è solo quello di sviare la persona che cerca aiuto.

2 Mi Piace

Ho provato a mettere mod un po in ogni operazione, forse anche inutilmente ma non continuo a capire per quale motivo mi da errore nell’output

#include <vector>
#include <iostream>
#include<stdlib.h>
using namespace std;

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

Ho risolto mettendo qualche variabile long long int invece di int, così riesco a fare i 10 punti del subtask 2, adesso proverò a trovare una soluzione più efficiente per risolvere gli altri.