結果
| 問題 |
No.954 Result
|
| コンテスト | |
| ユーザー |
alpha_virginis
|
| 提出日時 | 2019-12-16 20:39:54 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 5,313 bytes |
| コンパイル時間 | 14,173 ms |
| コンパイル使用メモリ | 401,524 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-07-02 20:29:20 |
| 合計ジャッジ時間 | 15,429 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 6 |
| other | AC * 6 WA * 23 |
コンパイルメッセージ
warning: unused import: `input_mcr::*`
--> src/main.rs:162:5
|
162 | use input_mcr::*;
| ^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused import: `std::cmp::*`
--> src/main.rs:163:5
|
163 | use std::cmp::*;
| ^^^^^^^^^^^
warning: struct `Parser` is never constructed
--> src/main.rs:73:16
|
73 | pub struct Parser<R> {
| ^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: associated function `from_str` is never used
--> src/main.rs:80:16
|
79 | impl Parser<io::Empty> {
| ---------------------- associated function in this implementation
80 | pub fn from_str(s: &str) -> Parser<io::Empty> {
| ^^^^^^^^
warning: associated items `new`, `update_buf`, `next`, and `fast_i64` are never used
--> src/main.rs:90:16
|
89 | impl<R: BufRead> Parser<R> {
| -------------------------- associated items in this implementation
90 | pub fn new(reader: R) -> Parser<R> {
| ^^^
...
97 | pub fn update_buf(&mut self) {
| ^^^^^^^^^^
...
113 | pub fn next<T: str::FromStr>(&mut self) -> Result<T, T::Err> {
| ^^^^
...
131 | pub fn fast_i64(&mut self) -> i64 {
| ^^^^^^^^
warning: unused `Result` that must be used
--> src/main.rs:169:5
|
169 | stdin.read_to_string(&mut t);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this `Result` may be an `Err` variant, which should be handled
= note: `#[warn(unused_must_use)]` on by default
help: use `let _ = ...` to ignore the resulting value
|
169 | let _ = stdin.read_to_string(&mut t);
| +++++++
ソースコード
#[macro_use]
mod input_mcr {
// ref: tanakh <https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8>
// diff: using Parser
#[macro_export(local_inner_macros)]
macro_rules! input {
(source = $s:expr, $($r:tt)*) => {
let mut parser = Parser::from_str($s);
input_inner!{parser, $($r)*}
};
(parser = $parser:ident, $($r:tt)*) => {
input_inner!{$parser, $($r)*}
};
(new_stdin_parser = $parser:ident, $($r:tt)*) => {
let stdin = std::io::stdin();
let reader = std::io::BufReader::new(stdin.lock());
let mut $parser = Parser::new(reader);
input_inner!{$parser, $($r)*}
};
($($r:tt)*) => {
input!{new_stdin_parser = parser, $($r)*}
};
}
#[macro_export(local_inner_macros)]
macro_rules! input_inner {
($parser:ident) => {};
($parser:ident, ) => {};
($parser:ident, $var:ident : $t:tt $($r:tt)*) => {
let $var = read_value!($parser, $t);
input_inner!{$parser $($r)*}
};
}
#[macro_export(local_inner_macros)]
macro_rules! read_value {
($parser:ident, ( $($t:tt),* )) => {
( $(read_value!($parser, $t)),* )
};
($parser:ident, [ $t:tt ; $len:expr ]) => {
(0..$len).map(|_| read_value!($parser, $t)).collect::<Vec<_>>()
};
($parser:ident, chars) => {
read_value!($parser, String).chars().collect::<Vec<char>>()
};
($parser:ident, char_) => {
read_value!($parser, String).chars().collect::<Vec<char>>()[0]
};
($parser:ident, usize1) => {
read_value!($parser, usize) - 1
};
($parser:ident, i64_) => {
$parser.fast_i64()
};
($parser:ident, usize_) => {
$parser.fast_i64() as usize
};
($parser:ident, usize1_) => {
($parser.fast_i64() - 1) as usize
};
($parser:ident, $t:ty) => {
$parser.next::<$t>().expect("Parse error")
};
}
use std::io;
use std::io::BufRead;
use std::str;
// ref: tatsuya6502 <https://qiita.com/tatsuya6502/items/cd448486f7ef7b5b8c7e>
// ref: wariuni <https://qiita.com/tatsuya6502/items/cd448486f7ef7b5b8c7e#comment-7040a5ae96305e884eb9>
// diff: using std::io::BufRead::fill_buf()
pub struct Parser<R> {
pub reader: R,
buf: Vec<u8>,
pos: usize,
}
impl Parser<io::Empty> {
pub fn from_str(s: &str) -> Parser<io::Empty> {
Parser {
reader: io::empty(),
buf: s.as_bytes().to_vec(),
pos: 0,
}
}
}
impl<R: BufRead> Parser<R> {
pub fn new(reader: R) -> Parser<R> {
Parser {
reader: reader,
buf: vec![],
pos: 0,
}
}
pub fn update_buf(&mut self) {
self.buf.clear();
self.pos = 0;
loop {
let (len, complete) = {
let buf2 = self.reader.fill_buf().unwrap();
self.buf.extend_from_slice(buf2);
let len = buf2.len();
(len, buf2[len - 1] <= 0x20)
};
self.reader.consume(len);
if complete {
break;
}
}
}
pub fn next<T: str::FromStr>(&mut self) -> Result<T, T::Err> {
loop {
let mut begin = self.pos;
while begin < self.buf.len() && (self.buf[begin] <= 0x20) {
begin += 1;
}
let mut end = begin;
while end < self.buf.len() && (self.buf[end] > 0x20) {
end += 1;
}
if begin != self.buf.len() {
self.pos = end;
return unsafe { str::from_utf8_unchecked(&self.buf[begin..end]) }.parse::<T>();
} else {
self.update_buf();
}
}
}
pub fn fast_i64(&mut self) -> i64 {
loop {
let mut begin = self.pos;
while begin < self.buf.len() && (self.buf[begin] <= 0x20) {
begin += 1;
}
if begin == self.buf.len() {
self.update_buf();
continue;
}
let mut res = 0;
let (is_positive, mut end) = match self.buf[begin] {
b'+' => (true, begin + 1),
b'-' => (false, begin + 1),
_ => (true, begin),
};
while end < self.buf.len() && (self.buf[end] > 0x20) {
res = res * 10 + (self.buf[end] as i64 - '0' as i64);
end += 1;
}
if begin != self.buf.len() {
self.pos = end;
return if is_positive { res } else { -res };
} else {
self.update_buf();
}
}
}
}
}
use input_mcr::*;
use std::cmp::*;
use std::io::Read;
fn main() {
let mut stdin = std::io::stdin();
let mut t = String::new();
stdin.read_to_string(&mut t);
assert!(t.chars().filter(|&x| x == '\n').count() == 5);
println!("0");
}
alpha_virginis