代码在我的电脑上运行良好,但我在将它提交到 coursera 时遇到未知信号 11 问题

Code works well on my computer but I am getting unknown signal 11 problem while submitting it to coursera

Task. 给定一组段 {[0, 0], [1, 1], . . . , [−1, −1]} 与直线上的整数坐标,找到最少的点数,使得每个线段至少包含一个点。也就是说,找到一组最小大小的整数,使得对于任何段 [ ] 都有一个点 ∈ 使得 ≤ ≤ .

输入格式。 输入的第一行包含段数。以下每一行都包含两个整数和(由 space 分隔)定义第 -th 段的端点坐标。

约束。 1 ≤ ≤ 100; 0 ≤ ≤ ≤ 109 对于所有 0 ≤ < .

输出格式。输出第一行最小点数和整数坐标 第二行的点数(由 spaces 分隔)。您可以按任何顺序输出点。如果有 有很多这样的点集,你可以输出任何一组。 (不难看出,总有 一组最小尺寸的点,使得点的所有坐标都是整数。)

我已经针对这个问题实施了解决方案并尝试对其进行压力测试。它真的很好用。 但是在将它提交给 coursera 时,我收到 "unknown signal 11" 谁能帮我解决这个问题?

#include <algorithm>
#include <iostream>
#include <climits>
#include <vector>

using std::vector;

struct Segment 
{
  int start, end;
};
bool compareByStart(const Segment &a, const Segment &b)
{
    return a.start < b.start;
}
vector<int> optimal_points(vector<Segment> &segments) 
{
  vector<int> points;
  sort(segments.begin(), segments.end(), compareByStart);
  for (long i = 0; i < segments.size(); ++i) 
  {
    int temp=i;
    int min=segments[i].end;
    while(segments[i].start<=segments[temp].end && i<segments.size())
    {
        if(segments[i].end<min)
        {
            min=segments[i].end;
        }
        i++;
    }
    points.push_back(min);
    i=temp;
    while(segments[i+1].start<=min)
    {
        i++;
    }
  }
  return points;
}

int main() {
  int n;
  std::cin >> n;
  vector<Segment> segments(n);
  for (size_t i = 0; i < segments.size(); ++i) {
    std::cin >> segments[i].start >> segments[i].end;
  }
  vector<int> points = optimal_points(segments);
  std::cout << points.size() << "\n";
  for (size_t i = 0; i < points.size(); ++i) {
    std::cout << points[i] << " ";
  }
}

这是错误的:

while(segments[i].start<=segments[temp].end && i<segments.size())

您应该在使用索引访问元素之前检查索引,而不是之后:

while(i < semgents.size() && segments[i].start<=segments[temp].end)

后来你有一个看起来有点可怕的循环,因为你根本不检查索引:

while(segments[i+1].start<=min)
{
    i++;
}

这也可以轻松访问 segments 越界。