Science_against_spam

Ciao a tutti, sto cercando di risolvere il problema Science against spam, ma non capisco come funziona la sottoposizione ai problemi. Ho provato il codice più e più volte provando a risolvere le tasks che chiede il problema e anche se mi funzionano le condizioni imposte dalle task il mio punteggio rimane quello dato dalla risoluzione degli esempi. Potete spiegarmi meglio come funzionano??
Codice in c++:

#include <iostream>
using namespace std;

int main()
{
	
	int B, G, E, Ni;
	int bgP;	//bad and good points
	int bE = 0,gE = 0;	//bad emails, good emails
	
	cin>>B;
	string bads[B];
	for(int i = 0; i < B; i++)
	{
		cin>>bads[i];
	}
	
	cin>>G;
	string goods[G];
	for(int i = 0; i < G; i++)
	{
	 	cin>>goods[i];
	}
	
	cin>>E;
	string words[E];
	for(int j = 0; j < E; j++)
	{
		cin>>Ni;
		bgP = 0;
		for(int k = 0; k < Ni; k++)
		{
			cin>>words[j];
			for(int i = 0; i < B; i++)
			{
				if(words[j] == bads[i])
				{
					bgP--;
				}
			}
			for(int i = 0; i < G;i++)
			{
				if(words[j] == goods[i])
				{
					bgP++;
				}
			}
		}
		if(bgP < 0)
		{
			bE++;
		}
		else if(bgP > 0)
		{
			gE++;
		}
	}
	
	
	cout<<bE<<" "<<gE<<endl;
	
	return 0;
}

Ho provato a vedere il tuo codice e mi sembra di capire che per determinare se una mail è spam o accettabile controlli se contiene più parole buone o cattive. Però nel testo è specificato che il numero non conta e ne basta soltanto una. Comunque per semplificare il codice ti consiglio di conservare solo le stringhe di cui hai veramente bisogno