Intuyo que estás usando C++... comprobar valores duplicados es tan sencillo como:
opción 1:std::vector< int > poderesUsados;
int poder;
// Comprobar si ya está usado el poder
// std::find esta en el include "algorithm"
auto it = std::find( poderesUsados.begin( ), poderesUsados.end( ), poder );
if ( it == poderesUsados.end( ) )
{
// No se ha usado el poder todavía
// marcamos el poder como usado
poderesUsados.push_back( poder );
}
opción 2:std::set< int > poderesUsados;
// da igual que usemos el mismo poder 20 veces... al final solo quedará un solo uso por cada poder:
poderesUsados.insert( 1 );
poderesUsados.insert( 2 );
poderesUsados.insert( 1 );
poderesUsados.insert( 1 );
// Imprimira: 1 2
for( auto it = poderesUsados.begin( ); it != poderesUsados.end( ); ++it )
cout << *it << " ";
Opción 3:Hay infinitas formas, yo te he mostrado dos diferentes.