結果
問題 |
No.3120 Lower Nim
|
ユーザー |
|
提出日時 | 2025-04-19 10:46:57 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 230 ms / 2,000 ms |
コード長 | 1,654 bytes |
コンパイル時間 | 12,501 ms |
コンパイル使用メモリ | 402,320 KB |
実行使用メモリ | 25,984 KB |
平均クエリ数 | 2685.91 |
最終ジャッジ日時 | 2025-04-19 10:47:19 |
合計ジャッジ時間 | 21,177 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 43 |
ソースコード
#![allow(unused_imports,non_snake_case,dead_code)] use std::{cmp::Reverse as Rev,collections::*,iter::*}; use proconio::{marker::*,input_interactive as input}; // #[fastout] fn main(){ input!{ n:usize, mut a:[usize;n], } let mut i_am_first=false; for i in 0..{ let cnt=a.iter().map(|&a|a>>i).sum::<usize>(); if cnt==0{ break; } else if cnt%2==1{ i_am_first=true; } } if i_am_first{ println!("First"); } else{ println!("Second"); } // i,x let solve=|x:usize,a:&[usize]|->(usize,usize){ for i in 0..{ let cnt=a.iter().map(|&a|a>>i).sum::<usize>(); if cnt==0{ panic!(); } else if cnt%2==1{ assert!(1<<i<=x); let idx=(0..a.len()).find(|&j|a[j]>=(1<<i)).unwrap(); return (idx,1<<i); } } panic!(); }; let get_state=||{ input!{ t:i64, } if t==1{ std::process::exit(0); } else if t==-1{ panic!(); } }; const INF:usize=usize::MAX/64; if i_am_first{ let (i,x)=solve(INF,&a); a[i]-=x; println!("{} {}",i+1,x); get_state(); // eprintln!("{:?}",a); } loop{ input!{ ji:Usize1, jx:usize, } get_state(); a[ji]-=jx; // eprintln!("{:?}",a); let (i,x)=solve(INF,&a); a[i]-=x; println!("{} {}",i+1,x); get_state(); // eprintln!("{:?}",a); } }