2017-10-12 7 views
-3

TopCoderからAdvertisingAgency問題を解決しようとしています。私がこのコードを提出し、システムテストを実行すると、プログラムがシステムテストに失敗したことが示されます。私がテストパネルからテストを実行すると、それはすべてのテストに合格します。あなたはどこに問題があるのか​​分かりますか?AdvertisingAgency - すべてのテストに合格しますが、全体的に失敗します[TOPCODER]

ソースコード:あなたはUBであるいないに関わらず、配列を、使用されるすべての

#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

を助けました質問/ 388242 /決定的なCの本のガイドとリスト)いくつかの偽の_competitive programming_サイトで。 – Ron

+4

'billboards [request]'にアクセスしていますが、初期化されていません。これはUBです。どのような問題を解決しなければなりませんか/期待される結果は何ですか? –

答えて

1

まず。問題に述べたように、看板はあなたが配列のインデックスとして直接その番号を使用して100に1から番号が、配列はゼロベースに、あなたはまた、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あなたのおかげでこの問題を解決しました! https://stackoverflow.com/([C++ブック]私は、関数の先頭でfalseにそのセットの看板値「の」追加され、それはこれらのいくつかとの時間を過ごすために良い:)

#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

ループは必要ありません。 'bool billboards [101] = {};'で十分です。 – Slava

関連する問題