bonjiri87
@bonjiri87

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Rust 配列の取り扱いについて

簡単に文法を学んだので、AtCoder Beginners Selectionを試しに解いてみて配列の取り扱いがよくわからなくなったので教えていただきたいです。
解いた問題はこちらです。
ABC085B - Kagami Mochi

配列だと変更できないと思い、ベクターに入れ替えたのち、重複を消して要素数を解答しました。

fn main() {
    input! {
        n:i32,
        a:[i32;n],
    }
    let mut num_list = vec![];
    for i in a {
        num_list.push(i);
    }
    num_list.sort();
    num_list.dedup();
    println!("{}", num_list.len());
}

しかし、配列でもmutで宣言すれば解答できました。
再宣言するようなものだから、エラーとならなかったのでしょうか。

fn main() {
    input! {
        n:i32,
        mut list:[i32;n],
    }
    list.sort();
    list.dedup();
    println!("{}", list.len());
}

試しに配列を作って操作したのが下のコードになります。
挙動が違うのは、input!マクロで受け取ったものと、自分で設定した差でしょうか。

fn main() {
    let x = [1, 2, 1, 4];
    println!("{:?}", x);
    //[1, 2, 1, 4]
    x.sort();
    //mutableではないからエラーはわかる
    x.dedup();
    println!("{:?}", x);
    //もちろん重複は消せない

    let mut x = [1, 2, 1, 4];
    println!("{:?}", x);
    //[1, 2, 1, 4]
    x.sort();
    println!("{:?}", x);
    //[1, 1, 2, 4]
    x.dedup();
    println!("{:?}", x);
    //sortはできるけど要素数の変更はできない?
}
0

2Answer

Comments

  1. @bonjiri87

    Questioner

    ありがとうございます!
    少しづつ、読み込んでみます。

input! ってなんでしょうか

Atcoderにコード入れて試すとコンパイルエラーで落ちますね

0Like

Comments

  1. @bonjiri87

    Questioner

    use proconio::input;

    fn main() {
    input! {
    //受け取りたい情報
    }
    }

    すみません、記載漏れがありました。

    proconioは簡単に入力ができるライブラリーです。
    中身の勉強はしてないんですが(もうすこしRustがわかるようになったらやります)、簡単に入力できるので使っています。

    本来はCargo.tomlを編集しないとダメなんですけど、atcoderは初めから使えるらしいです。

Your answer might help someone💌