use std::io;
use std::io::Write;
use std::str;
/// https://github.com/EbTech/rust-algorithms/blob/master/src/scanner.rs
pub struct Scanner<R> {
reader: R,
buffer: Vec<String>,
}
impl<R: io::BufRead> Scanner<R> {
pub fn new(reader: R) -> Self {
Self {
reader,
buffer: vec![],
}
}
pub fn token<T: 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();
}
}
}
fn main() {
let mut scan = Scanner::new(io::stdin().lock());
let mut out = io::BufWriter::new(io::stdout().lock());
let x = scan.token::<i32>();
let d = scan.token::<i32>();
let h = scan.token::<i32>();
let m = scan.token::<i32>();
let till_midnight = (23-h)*60+(60-m);
let days_after_start = d-22-x;
let time_shift_penalty = if d == 29 && h >= 2 { 0 } else { 60 };
if x <= 4 {
writeln!(out, "{}", (1-days_after_start)*60*24 + till_midnight).unwrap();
} else {
writeln!(out, "{}", (2-days_after_start)*60*24 + till_midnight - time_shift_penalty).unwrap();
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | use std::io; use std::io::Write; use std::str; /// https://github.com/EbTech/rust-algorithms/blob/master/src/scanner.rs pub struct Scanner<R> { reader: R, buffer: Vec<String>, } impl<R: io::BufRead> Scanner<R> { pub fn new(reader: R) -> Self { Self { reader, buffer: vec![], } } pub fn token<T: 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(); } } } fn main() { let mut scan = Scanner::new(io::stdin().lock()); let mut out = io::BufWriter::new(io::stdout().lock()); let x = scan.token::<i32>(); let d = scan.token::<i32>(); let h = scan.token::<i32>(); let m = scan.token::<i32>(); let till_midnight = (23-h)*60+(60-m); let days_after_start = d-22-x; let time_shift_penalty = if d == 29 && h >= 2 { 0 } else { 60 }; if x <= 4 { writeln!(out, "{}", (1-days_after_start)*60*24 + till_midnight).unwrap(); } else { writeln!(out, "{}", (2-days_after_start)*60*24 + till_midnight - time_shift_penalty).unwrap(); } } |
English