为什么我的代码不能打印正确的最小差异?

时间:2016-12-26 10:04:55

标签: c++

我目前正在尝试解决the horse-racing game on Codingame。问题陈述如下:

  

输入

     

第1行:马数N

     

以下N行:每匹马的力量Pi。 Pi是一个整数。

     

输出

     

两个最接近的优势之间的差异DD是一个大于或等于0的整数。

我正在使用std::set,我的算法很简单,但由于某种原因,它失败了2/8的提交验证器。我无法访问实际的测试数据,但根据测试名称,下面的代码无效

  • 所有马匹的力量相同
  • 马无序

为什么我的代码在输入上失败?

#include <iostream>
#include <set>

using namespace std;

int main()
{
    int N;
    cin >> N; cin.ignore();

    set<int> power;

    for (int i = 0; i < N; i++)
    {
        int Pi;
        cin >> Pi; cin.ignore();
        power.insert(Pi);
    }

    int minDiff = 10000000;

    auto i = power.begin();

    while (i != power.end())
    {
        minDiff = min(minDiff, abs(*i - *(++i)));
    }

    cout << minDiff << endl;
}

1 个答案:

答案 0 :(得分:1)

如果任何两匹马具有相同的力量,你的解决方案就会失败:

std::set<int> horses;
horses.insert(1);
horses.insert(2);
horses.insert(1);

// your algorithm returns 1, but it should be 0

此外,您有未定义的行为。如果此处++ipower.end()会怎样?

minDiff = std::min(minDiff, abs(*i - *(++i)));

使用两个迭代器,如果你想使用std::set,请检查只有一种马的特殊情况。