結果

問題 No.21 平均の差
ユーザー m0ntBL4Ncm0ntBL4Nc
提出日時 2019-09-10 14:55:17
言語 Rust
(1.77.0)
結果
WA  
実行時間 -
コード長 2,821 bytes
コンパイル時間 5,574 ms
コンパイル使用メモリ 145,900 KB
実行使用メモリ 813,304 KB
最終ジャッジ日時 2023-09-15 13:04:38
合計ジャッジ時間 7,601 ms
ジャッジサーバーID
(参考情報)
judge13 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,376 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 AC 1 ms
4,380 KB
testcase_04 AC 1 ms
4,376 KB
testcase_05 AC 1 ms
4,380 KB
testcase_06 AC 1 ms
4,380 KB
testcase_07 WA -
testcase_08 AC 1 ms
4,376 KB
testcase_09 MLE -
権限があれば一括ダウンロードができます
コンパイルメッセージ
warning: unnecessary trailing semicolon
  --> Main.rs:61:26
   |
61 |         let average: f64;;
   |                          ^ help: remove this semicolon
   |
   = note: `#[warn(redundant_semicolons)]` on by default

warning: 1 warning emitted

ソースコード

diff #

fn getline() -> String {
    let mut __ret = String::new();
    std::io::stdin().read_line(&mut __ret).ok();
    return __ret;
}

fn main() {
    let n: i32 = getline().trim().parse().unwrap();
    let k: i32 = getline().trim().parse().unwrap();
    // println!("n:{}, k:{}", n, k);

    // すべての数字を格納するnumbersを作成
    let mut numbers = Vec::new();
    for _ in 0.. n {
        let number: i32 = getline().trim().parse().unwrap();
        numbers.push(number);
    }
    // for i in 0..n {
    //     let ui = i as usize;
    //     println!("{}", numbers[ui]);
    // }

    // numbersを昇順にソート
    numbers.sort();

    // グループごとの数字の個数を求める
    let mut number_per_group: i32 = 0;     // グループごとの数字の個数
    if n % k == 0 {
        number_per_group = n / k;
    } else if (n + 1) % k == 0 {
        number_per_group = (n + 1) / k;
    } else if (n - 1) % k == 0 {
        number_per_group = (n - 1) / k;
    }
    // println!("number_per_group : {}", number_per_group);


    // 二次元Vectorを作成
    let mut vectorvector: Vec<Vec<i32>> = Vec::new();
    let mut group: Vec<i32> = Vec::new();     // グループ
    let mut count = 0;                        // 値を格納するごとに++
    while count < n {
        for _ in 0..number_per_group {
            group.push(numbers.remove(0));
            count += 1;
            if count == n {
                break;
            }
        }
        vectorvector.push(group.clone());
        // let mut group_clone: Vec<i32> =Vec::new();
        // group_clone.clone_from(&group);
        // vectorvector.push(group_clone);
        group.clear();
    }
    // println!("{:?}", vectorvector);

    // 平均を格納するVectorを作成
    let mut average_vector: Vec<f64> = Vec::new();
    for i in 0..k {
        let average: f64;;
        let mut sum = 0.0;
        let mut number_of_group_element = 0;
        for v in &vectorvector[i as usize] {
            sum += *v as f64;
            number_of_group_element += 1;
        }
        average = sum / number_of_group_element as f64;
        average_vector.push(average);
    }
    // println!("{:?}", average_vector);

    // 最大の平均と最小の平均を求める
    let average_vector_lastindex = average_vector.len() - 1;
    let max_average = average_vector[average_vector_lastindex];
    let min_average = average_vector[0];
    // println!("max: {} min: {}", max_average, min_average);

    // 平均の差を求める
    let diff_average = max_average - min_average;
    // println!("diff: {}", diff_average);
    // println!("diff(ceil): {}", diff_average.ceil());
    println!("{}", diff_average.ceil());

    // TODO
    // 動くが予想した値が得られないため, 修正すること

}
0