È possibile fare di meglio? 90/100 ois_fractal_painting

salve sto provando a fare 100/100 su ois_fractal però il solo i/o con putchar e getchar fa TLE
per adesso il mio codice che fà 90/100 è questo :

    #include <bits/stdc++.h>
    using namespace std;
    int n,k,pot;
    char specc[11][11],finit[(int)17e3][(int)17e3];
    inline void fractal(int xt,int yt,int id){
      for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
          if(specc[i][j]=='*'){
            for(int ir=xt+i*id;ir<xt+(i+1)*id;ir++){
              for(int jr=yt+j*id;jr<yt+(j+1)*id;jr++){
                finit[ir][jr]='*';
              }
            }
          }else if(id!=1)fractal(xt+i*id,yt+j*id,id/n);
        }
      }
    }
    int main(){
      freopen("input.txt","r",stdin);
      freopen("output.txt","w",stdout);
      cin>>n>>k;
      getchar();
      for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
          specc[i][j]=getchar();
        }
        getchar();
      }
      pot=1;
      int bin=n;
      while(k>0){
        if(k%2)pot*=bin;
        bin*=bin;
        k>>=1;
      }
      for(int i=0;i<pot;i++){
        for(int j=0;j<pot;j++){
          finit[i][j]='.';
        }
      }
      fractal(0,0,pot/n);
      for(int i=0;i<pot;i++){
        for(int j=0;j<pot;j++){
         putchar_unlocked(finit[i][j]);
        }
        putchar_unlocked(10); 
      }
    }

L’ho risolto parecchio tempo e non ricordo granchè ma ho usato memset e memcpy e stampe finali riga per riga con fwrite

ok il memset ma il memcpy e fwrite non so come utilizzarli xd

Grosso modo prima, con un ciclo, creo i pattern in memoria con memset per i quadrati neri e memcpy per gli altri, infine mano a mano che creo quello finale lo scarico su file a blocchi di k righe con la fwrite (_unlocked).