2017-10-12 40 views
-3

我想解決TopCoder的AdvertisingAgency問題。當我提交此代碼並運行系統測試時,它顯示程序未能通過系統測試。 Hovewer當我從測試面板運行測試時,它傳遞了所有這些測試。你知道問題出在哪裏嗎?AdvertisingAgency - 通過所有測試,但總體失敗[TOPCODER]

源代碼:

您使用unintialized陣列,這是所有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

不如花時間與這些[C++書籍]的(https://stackoverflow.com/問題/ 388242/the-definitive-c-book-guide-and-list),然後在一些假的_competitive programming_ site上。 – Ron

+4

您正在訪問未被初始化的「廣告牌[請求]」。這是UB。你有什麼問題需要解決/預期的結果是什麼? –

回答

1

首先。而在問題說明,廣告牌,編號從1到100,您直接使用數字作爲數組的索引,但陣列從零開始的,所以你有超出範圍的問題,這也導致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

我感謝你解決了這個問題! 我說「對」該組廣告牌值設置爲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

相關問題