输入结果:
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;
}