結果

問題 No.2608 Divide into two
ユーザー neko_the_shadowneko_the_shadow
提出日時 2024-02-14 11:59:21
言語 Rust
(1.77.0)
結果
AC  
実行時間 6 ms / 1,000 ms
コード長 984 bytes
コンパイル時間 1,080 ms
コンパイル使用メモリ 184,844 KB
実行使用メモリ 6,676 KB
最終ジャッジ日時 2024-02-14 11:59:23
合計ジャッジ時間 1,949 ms
ジャッジサーバーID
(参考情報)
judge13 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,676 KB
testcase_01 AC 2 ms
6,676 KB
testcase_02 AC 6 ms
6,676 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
warning: variable `T` should have a snake case name
 --> Main.rs:4:9
  |
4 |     let T = input();
  |         ^ help: convert the identifier to snake case: `t`
  |
  = note: `#[warn(non_snake_case)]` on by default

warning: variable `N` should have a snake case name
 --> Main.rs:6:13
  |
6 |         let N = input();
  |             ^ help: convert the identifier to snake case: `n`

warning: 2 warnings emitted

ソースコード

diff #

use std::io::stdin;

fn main() {
    let T = input();
    for _ in 0..T {
        let N = input();
        let sum = ((1+N)*N)/2;
        if sum%2!=0 {
            println!("{}", -1);
            continue;
        }

        let mut stack = vec![(1u128, 0u128, 0u128)]; // cur, bit
        while !stack.is_empty() {
            let (cur, bit, tot) = stack.pop().unwrap();
            if tot==sum/2 {
                let ret = (1..=N).map(|i| if bit&(1<<i)==0{"0"}else{"1"}).collect::<Vec<_>>().concat();
                println!("{}", ret);
                break;
            }
            if tot>sum/2 || cur==N+1 {
                continue;
            }
            // curを採用しない
            stack.push((cur+1, bit, tot));

            // curを採用する
            stack.push((cur+1, bit|(1<<cur), tot+cur));
        }
    }
}


fn input() -> u128 {
    let mut line = String::new();
    stdin().read_line(&mut line).unwrap();
    line.trim().parse::<>().unwrap()
}
0