L'errore è che memorizzavi anche i risultati della seconda prova nell'array a1 invece che nell'array a2.
Ora dovrebbe essere a posto:

codice:
#include <iostream>
using namespace std;
int main()
{
    float a1[20];
    float a2[20];
    int concorrenti;
    cout <<"Quanti conccorreti?(max 20)"<< endl;
    cin >> concorrenti;
    int a = 0;
    int b = 0;
    int x = 0;
    float contatore = 0;
    float contatore_max = 0;
    int convinc;

    // prima prova
    cout <<"Prima prova"<< endl;
    while(a < concorrenti) {
        cin >> a1[a];
        a = a + 1;
    }

    // seconda prova
    cout <<"Seconda prova"<< endl;
    while(b < concorrenti) {
        cin >> a2[b];
        b = b + 1;
    }

    // SVOLGIMENTO
    while (x < concorrenti) {
        contatore = a1[x] + a2[x];
        if (contatore > contatore_max) {
            contatore_max = contatore;
            convinc = 1+x;
        }
        x = x+1;
    }
    cout << "Vincitore: " << convinc << endl;
    cout << "Punteggio: " << contatore_max << endl;
    return 0;
}

Nota: non stai calcolando la media aritmetica, ma solo la somma dei punteggi. In effetti va bene anche così perché la media più alta corrisponde alla somma più alta, quindi il vincitore è sempre lo stesso. Però te lo segnalo...