2017-10-12 3 views
-3

J'essaie de résoudre le problème AdvertisingAgency de TopCoder. Lorsque je soumets ce code et que j'exécute les tests du système, cela montre que le programme a échoué aux tests du système. Hovewer quand je cours des tests du panneau de test il passe tous. Avez-vous une idée du problème?AdvertisingAgency - passant tous les tests mais échoue globalement [TOPCODER]

code source:

#include<iostream> 
#include<vector> 
using namespace std; 
class AdvertisingAgency{ 
public: 
    int numberOfRejections(vector<int>requests){ 
     int rejections=0; 
     bool billboards[100]; 
     for(int request:requests){ 
      if(billboards[request]){ 
       rejections++; 
      } 
      else{ 
       billboards[request]=true; 
      } 
     } 
     return rejections; 
    } 
}; 
+4

Mieux vaut passer du temps avec certains d'entre eux [C++ livres] (https://stackoverflow.com/ questions/388242/the-definitive-c-book-guide-and-list) puis sur un faux site de programmation compétitive. – Ron

+4

Vous accédez à 'billboards [request]', qui n'est pas initialisé. C'est UB. Quel problème devez-vous résoudre/quel est le résultat attendu? –

Répondre

1

Tout d'abord vous avez utilisé unintialized tableau, qui est UB. Et comme indiqué dans le problème, les panneaux d'affichage numérotés de 1 à 100. Vous utilisez ce numéro directement comme indice de tableau, mais tableau est zéro en fonction, vous avez donc de problème de gamme, ce qui conduit également à UB:

std::vector<bool> billboards(100); // unlike array vector will be properly initialized 
for(int request:requests) { 
    auto &board = billboards[request-1]; // index is zero based 
    rejections += board; 
    board = true; 
} 
0

I résolu ce problème grâce à vous! Je ajouté « pour » qui définissent les valeurs de panneaux d'affichage à faux au début de la fonction et il a aidé :)

#include<iostream> 
#include<vector> 
using namespace std; 
class AdvertisingAgency{ 
public: 
    int numberOfRejections(vector<int>requests){ 
     int rejections=0; 
     bool billboards[101]; 
     for(int i=0;i<101;i++){ 
      billboards[i]=false; 
     } 
     for(int request:requests){ 
      if(billboards[request]){ 
       rejections++; 
      } 
      else{ 
       billboards[request]=true; 
      } 
     } 
     return rejections; 
    } 
}; 
+2

Vous n'avez pas besoin de boucle, 'bool billboards [101] = {};' est suffisant. – Slava