gpt4 book ai didi

c++ - Codility 测试中的算术溢出

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:50 24 4
gpt4 key购买 nike

我做了 codility 演示测试“NumberOfDiscIntersections”: https://codility.com/programmers/lessons/4

我有:性能 = 100% 和正确性 87%

除了一个测试之外的所有测试都很好:

overflow 
arithmetic overflow tests

为什么我的 long long, 还不够?我不知道出了什么问题!

#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 数组非常大,您最终可能会向计数器 int 变量添加大索引。 step 变量与其相比非常小

counter += nb_upper - step;

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

关于c++ - Codility 测试中的算术溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24230167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com