Fractal painting 95/100

Sinceramente sta iniziando ad essere difficile capire cosa sbaglio.

#include <bits/stdc++.h>
using namespace std;

void punto(vector<string> &temp, vector<string> &input, int k){
	for(int i = 0; i < input.size(); ++i){
		temp[i + k] += input[i];
	}
}

void asterisco(vector<string> &temp, int k, int n){
	for(int i = 0; i < n; ++i){
		temp[i + k] += string(n, '*');
	}
}

int main(){
	int n, K; cin >> n >> K;
	vector<string> input(n), temp, sol;
	
	for(int i = 0; i < n; ++i){
		cin >> input[i];
	}
	
	sol = input;
	for(int k = 0; k < K-2; ++k){
		temp.resize(sol.size() * input.size());
		
		for(int i = 0; i < sol.size(); ++i){
			for(char c : sol[i]){
				if(c == '.')
					punto(temp, input, i*input.size());
				else
					asterisco(temp, i*input.size(), n);
			}
		}
		
		sol = temp;
		temp.clear();
		
	}
	
	string asterischi = string(sol[0].size(), '*');
	
	for(int i = 0; i < input.size(); ++i){
		for(int j = 0; j < sol.size(); ++j){
			for(int l = 0; l < input[i].size(); ++l){
				if(input[i][l] == '.')
					cout << sol[j];
				else
					cout << asterischi;
			}
			cout << endl;
		}
	}
	return 0;
}

questo è il mio codice, si crea il penultimo pattern e poi con quei 3 for alla fine li stampa in fila, tutto corretto tranne l’ultimo case.

sinceramente mi viene difficile pensare sia un problema dell’algoritmo, perchè se per gli altri 18 funziona… penso sia un problema di output troppo grande, quindi ho provato a fare da locale, ma con il freopen mi da tutti execution killed.
Devo impararmi qualche funzione di input output oppure si risolve in modo più semplice?grazie in anticipo a tutti quelli che mi fanno capire che sbaglio e come posso migliorare.

Non ho letto tutta la soluzione che hai mandato però leggendo questa condizione:

Ho sottomesso questo codice e l’unico testcase che fa fallire l’assert è l’ultimo.

#include <cassert>
#include <iostream>

using namespace std;

int main(){
	int n, K; cin >> n >> K;
	assert(K > 1);
}

Non sono sicuro di aver capito la tua soluzione ma mi sembra di vedere che fai un’ultima iterazione dell’algoritmo mentre stampi il risultato. Per esempio con K = 2 il for sopra non esegue ma il pattern viene creato in fase di output.
Il problema è che con K = 1 non devi fare niente ma fai comunque un’iterazione durante la stampa come se K fosse 2. Si risolve con un semplice if ma l’idea di fare un’ultima iterazione mentre stampi l’output anche se salva memoria non dovrebbe essere necessaria.
Con il constraint N^K \le 17000 la dimensione massima della matrice che devi tenere in memoria è (N^K)^2 \le 17000^2 = 289*10^6 quindi 289 MiB di memoria mentre il limite è 512 MiB. Poi magari se il codice è scritto in maniera poco efficente potrebbe utilizzare più memoria del dovuto ma non mi sembra il caso.

ah vero, non ci ho proprio pensato. Comunque riguardo la memoria, non sono riuscito a fare tutto con una matrice e ne utilizzo una come appoggio, quindi nel momento finale in cui faccio sol = temp ho caricato in memoria 2 matrici e di conseguenza nel caso massimo supero il limite di memoria. Grazie mille per l’aiuto comunque