Optimizando código Problema Brainfuck

Estou com problemas pra fazer meu código passar no tempo de execução, alguem pode me ajudar a tornar o código mais rápido?

[code]/*

  • File: main.cpp
  • Author: David
  • Created on 25 de Julho de 2010, 14:55
    */

#include <string>
using std::string;

#include <iostream>
using std::cin;
using std::cout;
using std::endl;

static string entrada, saida;
static int ponteiro = 0, iEntrada = 0;
static signed char fita[30000] = {-1};

int main()
{
void incrementaByte();
void decrementaByte();
void imprimeByte();
void leEAdiciona();
void loop(string instrucao);
void limpaFita();
void imprime10Primeiras();
void inicializaFita();

inicializaFita();
string instrucao, instLoop;
int loopStatus = -1, instancias;

cin &gt;&gt; instancias;
for (int i = 1; i &lt;= instancias; i++) {

    cin;
    cin &gt;&gt; entrada;
    cin &gt;&gt; instrucao;

    cout &lt;&lt; &quot;Instancia &quot; &lt;&lt; i &lt;&lt; endl;
    for (int i = 0; i &lt; instrucao.length(); i++) {
        if (loopStatus == -1){
            switch (instrucao[i]) {
                case '&gt;': ponteiro++;
                break;
                case '&lt;': ponteiro--;
                break;
                case '+': incrementaByte();
                break;
                case '-': decrementaByte();
                break;
                case '.': imprimeByte();
                break;
                case ',': leEAdiciona();
                break;
                case '#': imprime10Primeiras();
            }
        }
        if (instrucao[i] == ']') {
            loop(instLoop);
            loopStatus = -1;
            instLoop.clear();
        }

        if (loopStatus == 1) instLoop += instrucao[i];
        
        if (instrucao[i] == '[') loopStatus = 1;
    }

    cout &lt;&lt; &quot;\n\n&quot;;
    limpaFita();
}

return 0;

}

void inicializaFita() {
for (int i = 0; i < 30000; i++) {
fita[i] = -1;
}
}

void limpaFita() {
for (int i = 0; fita[i] != -1; i++) {
fita[i] = -1;
}
}

void incrementaByte() {
if (fita[ponteiro] == -1) fita[ponteiro]++;
fita[ponteiro]++;
}

void decrementaByte() {
fita[ponteiro]–;
}

void imprime10Primeiras() {
for (int i = 0; i < 10; i++) {
cout << fita[i];
}
}

void imprimeByte() {
cout << fita[ponteiro];
}

void leEAdiciona() {
fita[ponteiro] = entrada[iEntrada++];
}

void loop(string instrucao) {
void incrementaByte();
void decrementaByte();
void imprimeByte();
void leEAdiciona();
void imprime10Primeiras();
void loop(string instrucao);

int i = 0;
do {
    switch (instrucao[i]) {
        case '&gt;': ponteiro++;
        break;
        case '&lt;': ponteiro--;
        break;
        case '+': incrementaByte();
        break;
        case '-': decrementaByte();
        break;
        case '.': imprimeByte();
        break;
        case ',': leEAdiciona();
        break;
        case '#': imprime10Primeiras();
    }

    
    i++;
    if(i &gt; instrucao.length()) i = 0;
} while (fita[ponteiro]);

}
[/code]

O problema é este http://br.spoj.pl/problems/BRAIN/

O problema de demorar tanto é o cin e cout… tenta utilizar printf e scanf. Também pode usar putchar e getchar.

Att.

e para ler as strings?

Você pode usar daí gets.

Att.

mas se a string usar a classe string, a biblioteca string?

Você deve usar a função c_str da classe string para obter a string no formato do C. Referência http://www.cplusplus.com/reference/string/string/c_str/.

Att.

[quote=Adelar]Você deve usar a função c_str da classe string para obter a string no formato do C. Referência http://www.cplusplus.com/reference/string/string/c_str/.

Att.[/quote]

isso não vai demorar mais pra executar?

Acho que não tem muito não. Mas não recomendo usar string, porque força usar cin. Para otimizar o melhor é usar putchar e getchar mesmo.

Att.

você já respondeu esse problema no spoj, seja em qualquer linguagem?

Nunca submeti problema no SPOJ, vi ele por cima pelo link que você passou… pelo que parece é só um problema do tipo leitura/resposta, em que entradas e saídas grandes são apresentadas. Neste caso daí não recomendo utilizar as funções cin e cout do C++, por que elas demoram muito para executar e como nos problemas de maratona os milisegundos importam isto vai interferir no tempo de resposta.
Sobre a linguagem normalmente utilizo C, bem mais que C++.

Att.