题解 | 小红闯关

小红闯关

https://www.nowcoder.com/practice/7ce4b75f7a304be481e73bc4dd2705a4

const rl = require("readline").createInterface({ input: process.stdin });
const iter = rl[Symbol.asyncIterator]();
const readline = async (): Promise<string> => (await iter.next()).value;

interface v_i {
    v: number;
    i: number;
}
(async function (): Promise<number> {
    const [n, k] = (await readline()).split(" ").map(Number);
    const _map: Array<v_i> = (await readline())
        .split(" ")
        .map((v, i) => ({ v: Number(v), i: Math.floor(i / k) }));
    let res = 0;
    let used_tools_map: Array<boolean> = [true];
    let flag = 0;
    _map.sort((a, b) => a.v - b.v);
    for (let i = n - 1; i >= 0; i--) {
        let temp: number = _map[i].i;
        while (temp > flag && used_tools_map[temp]) {
            temp--;
        }
        if (!used_tools_map[temp]) {
            used_tools_map[temp] = true;
        } else {
            res += _map[i].v;
            flag = Math.max(flag, _map[i].i);
        }
    }
    return res;
})()
    .then((res) => console.log(res))
    .catch((err) => console.log(err))
    .finally(() => rl.close());

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务