Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 密码性测试中的算术溢出_C++_Algorithm - Fatal编程技术网

C++ 密码性测试中的算术溢出

C++ 密码性测试中的算术溢出,c++,algorithm,C++,Algorithm,我做了Codibility演示测试“NumberOfDiscCrops”: 我得到:性能=100%,正确率87% 除一项测试外,所有测试均顺利进行: overflow arithmetic overflow tests 为什么我的时间长,不够?我不知道出了什么问题 #include <algorithm> int solution(const vector<int> &A) { // write your code in C++11 v

我做了Codibility演示测试“NumberOfDiscCrops”:

我得到:性能=100%,正确率87%

除一项测试外,所有测试均顺利进行:

overflow 
arithmetic overflow tests
为什么我的时间长,不够?我不知道出了什么问题

#include <algorithm>


int solution(const vector<int> &A) 
{
    // write your code in C++11
    vector<long long > vec_max;
    for(int i = 0; i < A.size(); ++i)
    {
        vec_max.push_back( A[i] + i );
    }
    std::sort(vec_max.begin(),vec_max.end()); // sort by max

    int step = 1;
    int counter = 0;
    for(int i = A.size() - 1; i > -1; --i)
    {
        std::vector<long long>::iterator low;

        int nb_upper = A.size() - ( lower_bound( vec_max.begin(),vec_max.end(), (long long) (i - A[i]) ) - vec_max.begin() );
        counter += nb_upper - step;
        ++step;
    }

    if (counter > 10000000)
    {
        return -1;
    }
    else
    {
        return counter;
    }
}
#包括
整数解(常数向量&A)
{
//用C++11编写代码
向量向量最大值;
对于(int i=0;i-1;--i)
{
std::vector::iterator low;
int nb_upper=A.size()-(下界(向量最大值开始(),向量最大值结束(),(长-长)(i-A[i])向量最大值开始());
计数器+=nb_上阶;
++步骤;
}
如果(计数器>10000000)
{
返回-1;
}
其他的
{
返回计数器;
}
}

如果数组非常大,则可能会向计数器
int
变量添加较大的索引。与之相比,
步骤
变量非常小

counter += nb_upper - step;

这可能是变量溢出的地方。

仍然有一些
int
变量。你肯定没有一个会溢出吗?可选的向下循环:<代码>(AutoI= A siz(,);i!= 0;{…,} /代码),并考虑@ n-m的注释:是的,“计数器的最大值”是每个盘与每个盘相交,我没有想到它,但是有100个盘,这大约是1 + 2 +…100.000~(N^2+N)/2~5.000.050.000确实是溢出。我经常被我缺乏极限测试搞砸,这是Codibility教给我的一件事:)是的,如果你有一个自然数和作为输入数据,使用高斯公式来估计复杂度(在大O中是n^2有界的),并且看到对于一个32位整数,你只需要达到n=46340。我想这比你写的10万要高