AdvertisingAgency - 通过所有测试但总体上失败[TOPCODER]

时间:2017-10-12 18:57:59

标签: c++ algorithm

我正在尝试解决TopCoder的AdvertisingAgency问题。当我提交此代码并运行系统测试时,它显示程序未通过系统测试。 Hovewer当我从测试面板运行测试时,它通过所有这些测试。你知道问题出在哪里吗?

源代码:

#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;
    }
};

2 个答案:

答案 0 :(得分:1)

首先你使用了未初始化的数组,即UB。并且如问题中所述,广告牌编号为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;
 } 

答案 1 :(得分:0)

感谢你解决了这个问题! 我添加了&#39; for&#39;在函数开头将billboards值设置为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;
    }
};