結果

問題 No.5001 排他的論理和でランニング
ユーザー ジョギング
提出日時 2018-03-17 01:07:17
言語 Rust
(1.83.0 + proconio)
結果
AC  
実行時間 77 ms / 1,500 ms
コード長 1,430 bytes
コンパイル時間 1,188 ms
実行使用メモリ 24,796 KB
スコア 25,033,575
最終ジャッジ日時 2020-03-12 19:49:05
ジャッジサーバーID
(参考情報)
judge8 /
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 50
権限があれば一括ダウンロードができます
コンパイルメッセージ
warning: variable `v` is assigned to, but never used
  --> Main.rs:28:13
   |
28 |     let mut v = 0;
   |             ^
   |
   = note: `#[warn(unused_variables)]` on by default
   = note: consider using `_v` instead

ソースコード

diff #

use std::io::{stdin, Read};

fn main() {
    let mut buf = String::new();
    stdin().read_to_string(&mut buf).unwrap();
    let mut buf = buf.split_whitespace();
    let mut get = || buf.next().unwrap().parse::<i32>().unwrap();
    
    let n = get() as usize;
    let m = get() as usize;
    let mut xs = vec![];
    let mut ys = vec![vec![]; 32];
    let mut zs = vec![vec![]; n];
    for _ in 0..n { xs.push(get()); }
    xs.sort();
    for j in 0..n {
        let x = xs[j];
        for i in 0..32 {
            if (x & (1 << i)) > 0 {
                ys[i].push(j);
                zs[j].push(i);
            }
        }
    }
    let mut fs = vec![false; n];
    let mut bs = vec![0; 32];
    let mut ans = vec![];
    let mut v = 0;
    for i in 0..32 {
        let i = 31 - i;
        for &j in ys[i].iter() {
            if fs[j] { continue; }
            let x = xs[j];
            fs[j] = true;
            v |= x;
            ans.push(x);
            for &k in zs[j].iter() {
                bs[k] += 1;
            }
        }
    }
    for i in 0..n {
        if fs[i] { continue; }
        let x = xs[i];
        fs[i] = true;
        v |= x;
        ans.push(x);
        for &k in zs[i].iter() {
            bs[k] += 1;
        }
    }
    
    output(m, &ans);
}
fn output(m: usize, ans: &Vec<i32>) {
    for i in 0..m {
        if i > 0 { print!(" "); }
        print!("{}", ans[i]);
    }
    println!();   
}
0