結果
問題 | No.1729 ~サンプルはちゃんと見て!~ 16進数と8進数(1) |
ユーザー | katand |
提出日時 | 2021-11-05 21:38:32 |
言語 | Rust (1.77.0 + proconio) |
結果 |
AC
|
実行時間 | 1 ms / 2,000 ms |
コード長 | 5,474 bytes |
コンパイル時間 | 13,642 ms |
コンパイル使用メモリ | 401,416 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-06 12:23:57 |
合計ジャッジ時間 | 14,786 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,820 KB |
testcase_01 | AC | 1 ms
6,816 KB |
testcase_02 | AC | 1 ms
6,816 KB |
testcase_03 | AC | 1 ms
6,816 KB |
testcase_04 | AC | 1 ms
6,820 KB |
testcase_05 | AC | 1 ms
6,820 KB |
testcase_06 | AC | 1 ms
6,820 KB |
testcase_07 | AC | 1 ms
6,816 KB |
testcase_08 | AC | 1 ms
6,816 KB |
testcase_09 | AC | 1 ms
6,820 KB |
testcase_10 | AC | 1 ms
6,820 KB |
testcase_11 | AC | 1 ms
6,816 KB |
testcase_12 | AC | 1 ms
6,816 KB |
testcase_13 | AC | 1 ms
6,816 KB |
testcase_14 | AC | 1 ms
6,816 KB |
testcase_15 | AC | 1 ms
6,820 KB |
testcase_16 | AC | 1 ms
6,816 KB |
testcase_17 | AC | 1 ms
6,820 KB |
testcase_18 | AC | 1 ms
6,820 KB |
testcase_19 | AC | 1 ms
6,820 KB |
testcase_20 | AC | 1 ms
6,820 KB |
testcase_21 | AC | 1 ms
6,816 KB |
testcase_22 | AC | 1 ms
6,816 KB |
testcase_23 | AC | 1 ms
6,816 KB |
ソースコード
/// general import pub use std::{ cmp::{max, min, Ordering, Reverse}, collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, VecDeque}, convert::Infallible, convert::{TryFrom, TryInto}, fmt::{Debug, Display, Formatter}, io::{stdin, stdout, BufRead, BufWriter, Write}, iter::{Product, Sum}, marker::PhantomData, mem::swap, ops::{ Add, AddAssign, BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Bound, Deref, DerefMut, Div, DivAssign, Mul, MulAssign, Neg, Not, RangeBounds, Rem, RemAssign, Shl, ShlAssign, Shr, ShrAssign, Sub, SubAssign, }, str::{from_utf8, FromStr}, }; /// min-max macros #[allow(unused_macros)] macro_rules! chmin {($base:expr, $($cmps:expr),+ $(,)*) => {{let cmp_min = min!($($cmps),+);if $base > cmp_min {$base = cmp_min;true} else {false}}};} #[allow(unused_macros)] macro_rules! chmax {($base:expr, $($cmps:expr),+ $(,)*) => {{let cmp_max = max!($($cmps),+);if $base < cmp_max {$base = cmp_max;true} else {false}}};} #[allow(unused_macros)] macro_rules! min {($a:expr $(,)*) => {{$a}};($a:expr, $b:expr $(,)*) => {{if $a > $b {$b} else {$a}}};($a:expr, $($rest:expr),+ $(,)*) => {{let b = min!($($rest),+);if $a > b {b} else {$a}}};} #[allow(unused_macros)] macro_rules! max {($a:expr $(,)*) => {{$a}};($a:expr, $b:expr $(,)*) => {{if $a > $b {$a} else {$b}}};($a:expr, $($rest:expr),+ $(,)*) => {{let b = max!($($rest),+);if $a > b {$a} else {b}}};} pub fn to_lr<R: RangeBounds<usize>>(range: &R, length: usize) -> (usize, usize) { let l = match range.start_bound() { Bound::Unbounded => 0, Bound::Included(&s) => s, Bound::Excluded(&s) => s + 1, }; let r = match range.end_bound() { Bound::Unbounded => length, Bound::Included(&e) => e + 1, Bound::Excluded(&e) => e, }; assert!(l <= r && r <= length); (l, r) } /// stdin reader pub struct Reader<R> { reader: R, buf: VecDeque<String>, } impl<R: BufRead> Iterator for Reader<R> { type Item = String; fn next(&mut self) -> Option<String> { if self.buf.is_empty() { let mut buf = Vec::new(); self.reader.read_to_end(&mut buf).unwrap(); let s = from_utf8(&buf).expect("utf8でない文字列が入力されました."); s.split_whitespace() .map(ToString::to_string) .for_each(|s| self.buf.push_back(s)); } self.buf.pop_front() } } impl<R: BufRead> Reader<R> { pub fn new(reader: R) -> Reader<R> { Reader { reader, buf: VecDeque::new(), } } pub fn val<T: FromStr>(&mut self) -> T { self.next() .map(|token| token.parse().ok().expect("型変換エラー")) .expect("入力が足りません") } pub fn vec<T: FromStr>(&mut self, length: usize) -> Vec<T> { (0..length).map(|_| self.val()).collect() } pub fn chars(&mut self) -> Vec<char> { self.val::<String>().chars().collect() } pub fn digits(&mut self) -> Vec<i64> { self.val::<String>() .chars() .map(|c| (c as u8 - b'A') as i64) .collect() } pub fn char_map(&mut self, h: usize) -> Vec<Vec<char>> { (0..h).map(|_| self.chars()).collect() } pub fn bool_map(&mut self, h: usize, ng: char) -> Vec<Vec<bool>> { self.char_map(h) .iter() .map(|v| v.iter().map(|&c| c != ng).collect()) .collect() } pub fn matrix<T: FromStr>(&mut self, h: usize, w: usize) -> Vec<Vec<T>> { (0..h).map(|_| self.vec(w)).collect() } } /// stdin writer pub struct Writer<W: Write> { writer: BufWriter<W>, } impl<W: Write> Writer<W> { pub fn new(write: W) -> Self { Self { writer: BufWriter::new(write), } } pub fn println<S: Display>(&mut self, s: S) { writeln!(self.writer, "{}", s).expect("Failed to write.") } pub fn print<S: Display>(&mut self, s: S) { write!(self.writer, "{}", s).expect("Failed to write.") } pub fn print_join<S: Display>(&mut self, v: &[S], separator: &str) { v.iter().fold("", |sep, arg| { write!(self.writer, "{}{}", sep, arg).expect("Failed to write."); separator }); writeln!(self.writer).expect("Failed to write."); } } #[allow(dead_code)] fn main() { let stdin = stdin(); let stdout = stdout(); solve(Reader::new(stdin.lock()), Writer::new(stdout.lock())); } pub fn solve<R: BufRead, W: Write>(mut reader: Reader<R>, mut writer: Writer<W>) { let d = reader.digits(); let mut ans = vec![0; 8]; let mut right = d.len() as i64 - 1; while right >= 0 { let mut p = 0; for i in (right - 2..=right).rev() { if i < 0 { continue; } let mut k = d[i as usize] + 10; if right - i > 0 { k *= 16; } if right - i > 1 { k *= 16; } p += k; } while p > 0 { ans[(p % 8) as usize] += 1; p /= 8; } right -= 3; } let mut btm = BTreeMap::new(); for k in 0..=7 { if ans[k] > 0 { btm.entry(Reverse(ans[k])).or_insert(Vec::new()).push(k); } } writer.print_join(&btm.iter().next().unwrap().1, " "); }