2017-10-12 93 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

相关问题