C++ 运行少量数字时超出内存限制

C++ Memory Limit Exceeded when running small numbers

本文关键字:内存 运行 数字 C++      更新时间:2023-10-16

我正在为一个名为voff Iceland.Kattis.Com 的问题编写代码,在该代码中,您必须计算产生一定频率的吠叫所需的狗的数量。

有 N 种吠叫,每只狗每 K 秒最多可以吠一次。输入的第一行包含 N 和 K,第二行包含听到吠叫的时间。

我制作了一个python代码,它几乎足够快,可以得到100分,但只是有点害羞。所以我决定编写相同的代码,但在C++(clang 7.0.0-3~ubuntu0.18.04.1(中,当我运行除第一个测试用例以外的任何其他测试用例时,我得到了超出模因限制。

我尝试使用"长长","无符号长长"和"int",但我在所有这些上都超出了内存限制。

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N, K;
  vector<int> barks;
  vector<int> dogs;
  dogs.push_back(0);
  cin >> N >> K;
  for(int i = 0; i < N; i++){
    int inp;
    cin >> inp;
    barks.push_back(inp);
  }

  for(int bark : barks){
    for(int i = 0; i < dogs.size(); i++){
      if (bark >= dogs[i]){
        dogs[i] = bark + K;
        break;
      } else {
        dogs.push_back(bark + K);
      }
    }
  }
  cout << dogs.size() << endl;
}

输入第一个测试用例时,输出应该是"1"。但是当运行任何其他测试用例时,它会超过内存限制。

你最终会得到无限数量的狗,因为你在for i循环中添加的每只狗都无法通过bark >= dogs[i]测试,从而导致添加另一只狗,依此类推。

将您的代码更改为在没有符合条件的狗时仅添加一只狗有效:

for (int bark : barks) {
    bool found = false;
    for (int i = 0; i < dogs.size(); i++) {
        if (bark >= dogs[i]) {
            dogs[i] = bark + K;
            found = true;
            break;
        }
    }
    if (!found)
    {
        dogs.push_back(bark + K);
    }
}

附言不要使用#include <bits/stdc++.h>,它是非标准的,仅适用于某些平台,仅包含您需要的c ++标头(例如 <iostream><vector>(代替。 using namespace std也可能导致问题。