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

时间:2019-04-03 13:42:36

标签: c++

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

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

我已经编写了一个python代码,该代码几乎快到可以得到100分,但是到那里却有点害羞。因此,我决定用C ++(clang 7.0.0-3〜ubuntu0.18.04.1)编写相同的代码,当我运行除第一个测试用例以外的任何其他测试用例时,都会超出Memeory Limit。

我尝试使用'long long','unsigned long long'和'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'。 但是当运行任何其他测试用例时,它会超出内存限制。

1 个答案:

答案 0 :(得分:1)

最终您将获得无限数量的狗,因为您在@SuppressWarnings("static-access") @POST @Path("PruebaPlumaCalva") public Response testPlumaCalva(String jsonObject) { // ClientBuilder.newClient(). logger.debug("Test"); Map<String, Object> payload = new HashMap<String, Object>(); payload.put("documentType", x); payload.put("documentNumber", xxxxxx); payload.put("partner", "xxx"); payload.put("transactionId", "xxxxx"); logger.debug("Mis parametros son:" + payload); String json = null; try { json = (new ObjectMapper()).writeValueAsString(payload); } catch (JsonProcessingException e) { } HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("xxxxx", "xxxx"); //SSLContext scl = SslConfigurator.newInstance().trustStoreFile("C:/Users/juan.rojas/Documents/Juan José/Proyectos/PagosMoviles/KeyStore.jks").trustStorePassword("123456").keyStoreFile("C:/Users/juan.rojas/Documents/Juan José/Proyectos/PagosMoviles/KeyStore.jks").keyPassword("123456").createSSLContext(); SSLContext scl = SslConfigurator.newInstance().trustStoreFile("/cdrive/f_drive/Pos.jks").trustStorePassword("123456").keyStoreFile("/cdrive/f_drive/Pos.jks").keyPassword("test").createSSLContext(); Client client = ClientBuilder.newBuilder() .sslContext(scl) .build(); client.register(feature); WebTarget webTarget = client.target("xxxxxxxx"); Invocation.Builder invocationB = webTarget.request(MediaType.APPLICATION_JSON_TYPE); Response response = invocationB.post(Entity.json(json)); JsonNode jsonNode = bonusUtilities.createJsonNode(response); logger.debug("JsonNode Answer" + jsonNode); int x = 0; return response; } 循环中添加的每条狗都无法通过for i测试,从而导致添加了另一条狗,依此类推。

更改代码以在没有狗符合条件的情况下仅添加一只狗:

bark >= dogs[i]

P.S。不要使用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); } } ,它是非标准的,仅在某些平台上有效,只包含您需要的c ++标头(例如#include <bits/stdc++.h><iostream>)。 <vector>也会引起问题。