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 |
|
|
| 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 |