不需要递归
// 有效代码
// 先处理 5 和 3,再奇偶性优先、绝对值大优先、向原点折叠
const exec = (line: string) => {
if (0 === (inputCount = (inputCount + 1) % 2)) {
const snums = [] as number[];
const dnums = [] as number[];
// 2. 累计,5 的倍数为 +,则 3 的倍数为 -,其它数字根据奇偶分成 2 组并转为绝对值保存
let sum = line
.split(" ")
.filter(s => s !== "")
.map(num => parseInt(num))
.reduce((sum, num) => {
if (num % 5 === 0) return sum + num;
else if (num % 3 === 0) return sum - num;
else (num % 2 === 1 ? snums : dnums).push(Math.max(num, -num));
return sum;
}, 0);
// 3. 按照绝对值从大到小排列
snums.sort((a, b) => b - a);
dnums.sort((a, b) => b - a);
// 4. 奇偶性优先原则,从大到小将 sum 向 0 折叠
for (let i = 0, len = snums.length + dnums.length; i < len; i++) {
const val = (snums.length > 0 && (sum % 2 === 1 || dnums.length === 0) ? snums.shift() : dnums.shift()) || 0;
sum = sum + (sum > 0 ? -val : val);
}
// 折叠结果为 0 表示成立
return sum === 0;
} else return undefined; // 跳过奇数次的输入
};
let inputCount = 0;
// ACM 模式八股文代码别看
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on("line", (line: string) => (res => (res !== undefined ? outputs.push(`${res}`) : null))(exec(line)));
rl.on("close", () => outputs.forEach(res => console.log(res)));
const outputs: string[] = [];



京公网安备 11010502036488号