Submission #66349064


Source Code Expand

// (S: string) => number
const solve = (S) => {
    // 一旦無条件でランレングス圧縮 偶数番目が1の数 最初と最後の0は無視 長さが奇数か0になる
    const comp = [];
    if (S[0] === "1") comp[0] = 1; 
    for (let i = 1; i < S.length; i++) {
        if (S[i] === S[i - 1]) {
            comp[comp.length - 1] += 1;
        } else {
            comp[comp.length] = 1;
        }
    }
    if (comp.length % 2 === 0) comp.pop();
    //// console.log("comp", comp);
    // 長さが0か1のときは操作0回ですでに条件を満たしているのでearly return
    if (comp.length <= 1) return 0;
    // 左から「1の区間-0の区間-1の区間」を取ってきて、
    // 「つなげて両方残す」「左を0にして右を残す」の2択ならどっちがここで消す数が少なく済むかを計算
    // 少なく済む方を選択していく 同格なら右を残すを選択
    let flip_count = 0;
    let seg_L = comp[0];
    let seg_C = comp[1];
    let seg_R = comp[2];
    for (let i = 2; i <= comp.length - 1; i += 2) {
        if (seg_C < seg_L) {
            // 0の区間が左1の区間より短いならつなげたほうがいい
            flip_count += seg_C;
            // つなげたのを左区間、1個右を中区間、2個右を右区間とする
            seg_L += seg_C + seg_R;
        } else {
            // そうでなければ右だけ残すほうがいい
            flip_count += seg_L;
            // 今の右区間を左区間、1個右を中区間、2個右を右区間とする
            seg_L = seg_R;
        }
        seg_C = comp[i + 1];
        seg_R = comp[i + 2];
    }
    return flip_count;
};

function Main(inputText) {
    /** @type {String[][]} - スペース区切りと改行区切りをそのまま2次元配列に変えた状態 */
    const input = inputText.trim().split("\n").map(row => row.split(" "));
    /* ==== 本体 ==== */
    const T = +input[0][0];
    const cases = [];
    for (let i = 1; i <= T; i++) {
        cases.push(input[2 * i][0]);
    }
    cases.forEach(case_i => {
        // リバースして両方向から確かめる 右を0にして左を残すのが最善の可能性があるので
        console.log(Math.min(
            solve(case_i),
            solve( Array.from(case_i).reverse().join("") )
        ));
    })
}
/* ==== これを書かないといけないらしい ==== */
Main(require("fs").readFileSync("/dev/stdin", "utf8"));

Submission Info

Submission Time
Task D - Flip to Gather
User AXT_AyaKoto
Language JavaScript (Node.js 18.16.1)
Score 0
Code Size 2552 Byte
Status WA
Exec Time 206 ms
Memory 63056 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 400
Status
AC × 2
AC × 6
WA × 24
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 41 ms 42644 KiB
00_sample_01.txt AC 41 ms 42788 KiB
01_test_00.txt WA 206 ms 61176 KiB
01_test_01.txt WA 180 ms 60524 KiB
01_test_02.txt WA 184 ms 58456 KiB
01_test_03.txt WA 173 ms 60256 KiB
01_test_04.txt WA 192 ms 60224 KiB
01_test_05.txt WA 173 ms 58388 KiB
01_test_06.txt WA 168 ms 58604 KiB
01_test_07.txt WA 170 ms 58672 KiB
01_test_08.txt WA 167 ms 58276 KiB
01_test_09.txt WA 156 ms 57960 KiB
01_test_10.txt WA 125 ms 53908 KiB
01_test_11.txt WA 124 ms 53728 KiB
01_test_12.txt WA 119 ms 53060 KiB
01_test_13.txt WA 66 ms 48944 KiB
01_test_14.txt WA 80 ms 49612 KiB
01_test_15.txt WA 66 ms 49044 KiB
01_test_16.txt WA 67 ms 49392 KiB
01_test_17.txt WA 71 ms 49744 KiB
01_test_18.txt WA 70 ms 49680 KiB
01_test_19.txt WA 78 ms 53700 KiB
01_test_20.txt WA 91 ms 53604 KiB
01_test_21.txt WA 87 ms 53120 KiB
01_test_22.txt WA 67 ms 57384 KiB
01_test_23.txt WA 67 ms 55056 KiB
01_test_24.txt AC 65 ms 56096 KiB
01_test_25.txt AC 59 ms 54544 KiB
01_test_26.txt AC 120 ms 57576 KiB
01_test_27.txt AC 69 ms 63056 KiB