結果
| 問題 |
No.3163 [Cherry 7th Tune N] Draft
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-06-05 14:26:45 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 2,313 bytes |
| コンパイル時間 | 12,597 ms |
| コンパイル使用メモリ | 384,796 KB |
| 実行使用メモリ | 7,844 KB |
| 最終ジャッジ日時 | 2025-06-05 14:27:01 |
| 合計ジャッジ時間 | 13,790 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 7 |
ソースコード
use std::fmt::Debug;
use std::io;
use std::str::FromStr;
struct Scanner<R, W>
where
R: io::BufRead,
W: io::Write,
{
reader: R,
writer: W,
buffer: Vec<String>,
}
impl<R: io::BufRead, W: io::Write> Scanner<R, W> {
fn new(reader: R, writer: W) -> Self
where
R: io::BufRead,
W: io::Write,
{
Self {
reader,
writer,
buffer: Vec::new(),
}
}
fn next<T: std::str::FromStr>(&mut self) -> T {
loop {
if let Some(token) = self.buffer.pop() {
return token.parse().ok().expect("Failed parse");
}
let mut input = String::new();
self.reader.read_line(&mut input).expect("Failed read");
self.buffer = input.split_whitespace().rev().map(String::from).collect();
}
}
#[allow(dead_code)]
fn next_vec<T: std::str::FromStr>(&mut self) -> Vec<T>
where
<T as FromStr>::Err: Debug,
{
let mut input = String::new();
self.reader.read_line(&mut input).expect("Failed read");
input
.split_whitespace()
.rev()
.map(|x| x.parse::<T>().unwrap())
.collect()
}
}
fn solve<R: io::BufRead, W: io::Write>(scan: &mut Scanner<R, W>) {
let t = scan.next::<usize>();
for _ in 0..t {
let mut arr = scan.next_vec::<usize>();
arr.sort();
writeln!(scan.writer, "{}", arr[4] - arr[0]).ok();
}
}
fn main() {
let stdin = io::stdin();
let stdout = &mut io::BufWriter::new(io::stdout());
let mut scan = Scanner::new(stdin.lock(), stdout);
solve(&mut scan);
}
#[cfg(test)]
mod tests {
use super::*;
fn get_output(input: &[u8]) -> String {
let stdout = Vec::new();
let mut scan = Scanner::new(&input[..], stdout);
solve(&mut scan);
let output = String::from_utf8(scan.writer).expect("what?");
let output = output.trim();
output.to_string()
}
#[test]
fn case_0() {
let output = get_output(
b"
3
158 172 161 159 154
1000 1000 5000 5000 5000
46 46 46 46 46
",
);
assert_eq!(output, "18\n4000\n0".to_owned());
}
}