結果
問題 | No.1714 Tag on Grid |
ユーザー |
|
提出日時 | 2021-10-22 21:30:09 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 1 ms / 2,000 ms |
コード長 | 3,863 bytes |
コンパイル時間 | 13,233 ms |
コンパイル使用メモリ | 388,864 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-23 04:43:36 |
合計ジャッジ時間 | 14,359 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 |
コンパイルメッセージ
warning: unused variable: `h` --> src/main.rs:14:9 | 14 | h: usize, | ^ | help: `h` is captured in macro and introduced a unused variable --> src/main.rs:50:17 | 13 | / input!{ 14 | | h: usize, 15 | | w: usize, 16 | | ni: Usize1, ... | 19 | | zj: Usize1, 20 | | } | |_____- in this macro invocation ... 50 | let sc,$t); | ^^^^ = note: `#[warn(unused_variables)]` on by default = note: this warning originates in the macro `input_inner` which comes from the expansion of the macro `input` (in Nightly builds, run with -Z macro-backtrace for more info) warning: unused variable: `w` --> src/main.rs:15:9 | 15 | w: usize, | ^ | help: `w` is captured in macro and introduced a unused variable --> src/main.rs:50:17 | 13 | / input!{ 14 | | h: usize, 15 | | w: usize, 16 | | ni: Usize1, ... | 19 | | zj: Usize1, 20 | | } | |_____- in this macro invocation ... 50 | let $var=read_value!(t); | ^^^^ = note: this warning originates in the macro `input_inner` which comes from the expansion of the macro `input` (in Nightly builds, run with -Z macro-backtrace for more info)
ソースコード
#![allow(unused_macros, unused_imports)]macro_rules! dbg {($($xs:expr),+) => {if cfg!(debug_assertions) {std::dbg!($($xs),+)} else {($($xs),+)}}}fn main() {input!{h: usize,w: usize,ni: Usize1,nj: Usize1,zi: Usize1,zj: Usize1,}if (ni+nj)%2 != (zi+zj)%2 {println!("Yes");} else {println!("No");}}pub mod input {use std::{cell::RefCell, io::Read, mem};thread_local!(static DONE: RefCell<bool> = RefCell::new(false));#[macro_export]macro_rules! input{(read=$read:expr,$($r:tt)*)=>{let mut sc = input::Scanner::new($read);input_inner!{sc,$($r)*}};($($r:tt)*)=>{let mut sc = input::Scanner::default();input_inner!{sc,$($r)*}};}#[macro_export]macro_rules! input_inner{($sc:expr)=>{};($sc:expr,)=>{};($sc:expr,$var:ident:$t:tt$($r:tt)*)=>{let $var=read_value!($sc,$t);input_inner!{$sc $($r)*}};}#[macro_export]macro_rules! read_value{($sc:expr,($($t:tt),*))=>{($(read_value!($sc,$t)),*)};($sc:expr,[$t:tt;$len:expr])=>{(0..$len).map(|_|read_value!($sc,$t)).collect::<Vec<_>>()};($sc:expr,[$t:tt])=>{{let len = read_value!($sc, usize);(0..len).map(|_|read_value!($sc,$t)).collect::<Vec<_>>()}};($sc:expr,Chars)=>{read_value!($sc,String).chars().collect::<Vec<char>>()};($sc:expr,Bytes)=>{read_value!($sc,String).bytes().collect::<Vec<u8>>()};($sc:expr,Usize1)=>{read_value!($sc,usize)-1};($sc:expr,$t:ty)=>{$sc.next::<$t>()};}pub fn buf_stdin() -> Box<dyn FnMut() -> String> {Box::new(|| {DONE.with(|f| {assert!(!*f.borrow(), "Insufficient input");*f.borrow_mut() = true;});let stdin = std::io::stdin();let mut s = String::new();stdin.lock().read_to_string(&mut s).unwrap();s})}pub fn line_stdin() -> Box<dyn FnMut() -> String> {Box::new(|| {let stdin = std::io::stdin();let mut s = String::new();stdin.read_line(&mut s).unwrap();s})}pub fn file<P: AsRef<std::path::Path>>(path: P) -> Box<dyn FnMut() -> String> {let path = path.as_ref().to_owned();Box::new(move || {DONE.with(|f| {assert!(!*f.borrow(), "Insufficient input");*f.borrow_mut() = true;});std::fs::read_to_string(&path).unwrap()})}pub struct Scanner {read_fn: Box<dyn FnMut() -> String>,s: Box<str>,input: std::str::SplitAsciiWhitespace<'static>,}impl Default for Scanner {fn default() -> Self {Self::new(if cfg!(debug_assertions) { line_stdin() } else { buf_stdin() })}}impl Scanner {pub fn new(read_fn: Box<dyn FnMut() -> String>) -> Self {Self {read_fn,s: "".into(),input: "".split_ascii_whitespace(),}}pub fn next<T: std::str::FromStr>(&mut self) -> TwhereT::Err: std::fmt::Debug,{if let Some(v) = self.input.next() {v.parse::<T>().expect("Parse error")} else {self.s = (&mut self.read_fn)().into_boxed_str();let s: &'static str = unsafe { mem::transmute(&*self.s) };self.input = s.split_ascii_whitespace();self.next()}}}}