結果

問題 No.3114 0→1
ユーザー Alph(その辺の大学生A)
提出日時 2025-04-20 17:35:48
言語 Rust
(1.83.0 + proconio)
結果
RE  
実行時間 -
コード長 1,493 bytes
コンパイル時間 14,543 ms
コンパイル使用メモリ 395,472 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-04-20 17:36:04
合計ジャッジ時間 15,684 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample RE * 3
other RE * 30
権限があれば一括ダウンロードができます
コンパイルメッセージ
warning: function `out` is never used
 --> src/main.rs:3:4
  |
3 | fn out(a: &[bool], k: usize) {
  |    ^^^
  |
  = note: `#[warn(dead_code)]` on by default

ソースコード

diff #

use std::io::{self, Write};

fn out(a: &[bool], k: usize) {
    for i in k - 1..a.len() {
        print!("{}", if a[i] { 1 } else { 0 });
    }
    println!();
}

fn to_bitarray(s: &str, s_arr: &mut Vec<bool>, k: usize, full_n: usize) {
    for i in 0..k - 1 {
        s_arr[i] = true;
    }
    for i in k - 1..full_n {
        s_arr[i] = s.chars().nth(i - k + 1).unwrap() == '1';
    }
}

fn min_find(s: &str, n: usize, full_n: usize) -> usize {
    let weight_min = (n + 1) / 2;
    let mut change = 0;
    let mut h_weight = 0;
    let mut s_arr = vec![false; full_n];
    let mut k_arr = vec![false; full_n];

    to_bitarray(s, &mut s_arr, weight_min, full_n);

    k_arr.copy_from_slice(&s_arr);

    for i in 0..n {
        h_weight += if s_arr[i] { 1 } else { 0 };
    }

    if h_weight < weight_min {
        s_arr[n - 1] = true;
        h_weight += 1;
        change += 1;
    }

    for i in 1..=full_n - n {
        h_weight -= if s_arr[i - 1] { 1 } else { 0 };
        h_weight += if s_arr[i + n - 1] { 1 } else { 0 };
        if h_weight < weight_min {
            s_arr[i + n - 1] = true;
            h_weight += 1;
            change += 1;
        }
    }

    change
}

fn main() {
    let mut input = String::new();
    io::stdout().flush().unwrap();
    io::stdin().read_line(&mut input).unwrap();
    let n: usize = input.trim().parse().unwrap();
    let mut s = String::new();
    io::stdin().read_line(&mut s).unwrap();
    println!("{}", min_find(&s.trim(), n, 3));
}
0