我目前正在尝试解决the horse-racing game on Codingame。问题陈述如下:
输入
第1行:马数N
以下N行:每匹马的力量Pi。 Pi是一个整数。
输出
两个最接近的优势之间的差异
D
。D
是一个大于或等于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;
}
答案 0 :(得分:1)
如果任何两匹马具有相同的力量,你的解决方案就会失败:
std::set<int> horses;
horses.insert(1);
horses.insert(2);
horses.insert(1);
// your algorithm returns 1, but it should be 0
此外,您有未定义的行为。如果此处++i
为power.end()
会怎样?
minDiff = std::min(minDiff, abs(*i - *(++i)));
使用两个迭代器,如果你想使用std::set
,请检查只有一种马的特殊情况。