C++跑的结果和本地结果测试不同,本地通过线上执行结果错误?
  • 板块工单反馈版
  • 楼主xiaoyao66
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/20 21:21
  • 上次更新2023/10/27 19:13:06
查看原帖
C++跑的结果和本地结果测试不同,本地通过线上执行结果错误?
729953
xiaoyao66楼主2022/7/20 21:21

输入结果:

10
1552355 4716233 6677642 1862286 6399325 395805 2340960 8133250 2620800 2005951

本地输出:

5552531 6734231 6677642 1886622 6995323 955803 6942300 8533210 8622000 2009551

本地输出正确,在网页上跑缺始终显示失败。

// 代码如下

#pragma once

#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NONSTDC_NO_WARNINGS
#endif

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <list>
#include <deque>
#include <functional>
#include <algorithm>

#include <string.h>
#include <assert.h>
#include <math.h>
#include <stdio.h>

typedef long long long64;
typedef unsigned long long ull;

static std::vector<std::string>& tt_str_split(std::vector<std::string>& result,
                                              const std::string& s,
                                              const std::string& delimiters,
                                              bool remove_empty = true) {
    result.clear();
    size_t current;
    size_t next = static_cast<size_t>(-1);
    do {
        if (remove_empty) {
            next = s.find_first_not_of(delimiters, next + 1);
            if (next == std::string::npos) {
                break;
            }
            next -= 1;
        }

        current = next + 1;
        next = s.find_first_of(delimiters, current);
        result.push_back(s.substr(current, next - current));
    } while (next != std::string::npos);

    return result;
}

static std::string GetLineOnce(long64 max_length) {
    std::vector<char> buf(max_length, '\0');
    char* start = &buf[0];
    char* input = start;
    for (; input - start < (long64)buf.size(); ++input) {
        *input = (char)getchar();
        if (*input == '\n' || *input == '\r' || *input == '\0') {
            *input = 0;
            break;
        }
    }

    std::string res(&buf[0], input);
    return res;
}

static std::string GetLine(long64 max_length = 128 * 1024) {
    std::string s;
    while (s.empty()) {
        s = GetLineOnce(max_length);
    }
    return s;
}

long64 ParseInt(std::string s) {
    std::map<long64, long64> ji, o;
    for (size_t i = 0; i < s.size(); i++) {
        int num = s[i] - '0';
        if ((num % 2) == 0)
            ++o[num];
        else
            ++ji[num];
    }
    long64 result = 0;
    for (size_t i = 0; i < s.size(); i++) {
        result *= 10;

        int num = s[i] - '0';
        if ((num % 2) == 0) {
            result += o.rbegin()->first;
            if (--o.rbegin()->second == 0) o.erase(o.rbegin()->first);
        } else {
            result += ji.rbegin()->first;
            if (--ji.rbegin()->second == 0) ji.erase(ji.rbegin()->first);
        }
    }

    return result;
}

int main() {
    int tmp;
    scanf("%d", &tmp);
    std::string sl = GetLine();
    std::vector<std::string> gp;
    tt_str_split(gp, sl, " ");
    assert(tmp == gp.size());
    std::string s;
    for (size_t i = 0; i < tmp; i++) {
        long64 r = ParseInt(gp[i]);
        printf("%lld ", r);
    }
    return 0;
}
2022/7/20 21:21
加载中...