Getline read, does not read the string and tb when accessing a vector that does not exist or insuffient size

Well, this is a player ranking of a two-by-two match, where you rank the match you stopped in.

#include<iostream>
using namespace std;

int main()
{
    int N,Ri,Ei,partidas,tamanho,contador,posicao1,i,achar,total1,total2;
    string palavra;

    cin>>N;

    partidas=N/2;
    achar=0;
    int demora[N+5],classificacao[N+5],rapidez[N+5],total[N+5];

    contador=0;
    while(contador<N)
    {//Lê a quantidade de jogadores
        cin>>Ri>>Ei;

        demora[contador]=Ri;
        rapidez[contador]=Ei;
        classificacao[contador]=0;

        contador++;
    }

    cin.ignore();
    getline(cin,palavra);
    //cout<<palavra<<" esse é o tamnho"<<endl;

    tamanho=palavra.length();
    contador=1;//partida de numero 1

    total[0]=(rapidez[0]*tamanho)+demora[0];
    for(i=1;i<N;i++)
    {//vai me cada vetor e classifica os jogadores
        total[i]=(rapidez[i]*tamanho)+demora[i];

        if(total[i]>total[i-1])
        {//classifica primeira variavel perdedor
            classificacao[i]=contador;
            classificacao[i-1]=contador+1;//vai pra proxima rodada
            i++;
        }
        else
        {//classifica a segunda variavel perdedor
            classificacao[i-1]=contador;
            classificacao[i]=contador+1;//vai pra proxima rodada
            i++;
        }
    }

    contador=2;//Partidas dois se houver entra no while
    while(partidas!=1)
    {//

        //para as partidas
        i=0;
        while(i<N)
        {//percorre s o vetor


            while(achar!=1)
            {//achar o primeiro
                if(classificacao[i]==contador)
                {//o primeiro participante
                    posicao1=i;
                    total1=(tamanho*contador*rapidez[i])+demora[i];
                    achar=1;
                }
                i++;
            }
            //continuar procurando aprtir do primeiro
            while(achar!=2)
            {//achar o primeiro
                if(classificacao[i]==contador)
                {//o primeiro participante

                    total2=(tamanho*contador*rapidez[i])+demora[i];
                    achar=2;

                    if(total1>total2)
                    {//
                        classificacao[i]=contador+1;//vai pra proxima rodada
                    }
                    else
                    {//classifica a segunda variavel perdedor
                        classificacao[posicao1]=contador+1;//vai pra proxima rodada
                    }
                }
                i++;
            }
        }
        achar=0;
        contador++;//qual partida esta
        partidas/=2;//dimuniu as partidas
        tamanho*=2;//cada rodada o tamanho da string muda
    }

    for(int i=0;i<N;i++)
        {

            if(i==N-1)
            {
                cout<<classificacao[i]<<endl;
            }
            else
            {
                cout<<classificacao[i]<<" ";
            }
    }
}

Example of input that should be:

4

4 1

3 1

2 1

1 1

ABCD

Sometimes prints normal, but does not consider the string size other times from runtime error.

Author: Fernando Junior, 2018-10-10