我正在为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'。 但是当运行任何其他测试用例时,它会超出内存限制。
答案 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>
也会引起问题。