Submission #37447427


Source Code Expand

// -*- coding:utf-8-unix -*-
// rustup doc --std --toolchain 1.42.0

#![allow(unused_imports)]
#![allow(unused_macros)]
use bitset_fixed::BitSet;
use itertools::*;
use num::integer::*;
use petgraph::algo::*;
use petgraph::graph::{DiGraph, Graph, NodeIndex, UnGraph};
use petgraph::unionfind::UnionFind;
use petgraph::visit::{
    Bfs, Dfs, EdgeRef, IntoEdges, NodeCount, NodeIndexable, VisitMap, Visitable,
};
//use proconio::{input, marker::{Bytes, Chars, Isize1, Usize1}, source::{auto::AutoSource, line::LineSource, once::OnceSource}};
use rand::{
    distributions::WeightedIndex,
    prelude::{thread_rng, Distribution},
    seq::SliceRandom,
    Rng,
};
use regex::Regex;
use std::collections::*;
use std::io::{stderr, stdin, stdout, BufRead, BufReader, BufWriter, Read, Write};
use superslice::Ext;

/// input macros based on tanakh's input macro / proconio-rs.
/// tanakh's input macro: <https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8>
/// proconio-rs: <https://docs.rs/proconio/0.3.8/proconio/>
/// this macro recieve `Iterator<Item = u8>` input source, except for Bytes/Chars/String read
/// ProconIBufIter receive `std::io::BufRead` trait. (`std::io::StdinLock`, `std::io::BufReader`, `&[u8]`, etc.)
#[allow(unused)]
macro_rules! finput_inner {
    ($iter:expr) => {};
    ($iter:expr, ) => {};
    ($iter:expr, mut $var:ident : $t:tt $($r:tt)*) => {
        let mut $var = fread_value!($iter, $t);
        finput_inner!{$iter $($r)*}
    };
    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {
        let $var = fread_value!($iter, $t);
        finput_inner!{$iter $($r)*}
    };
}
#[allow(unused)]
macro_rules! fread_value {
    ($iter:expr, ( $($t:tt),* )) => { ( $(fread_value!($iter, $t)),* ) };
    ($iter:expr, [ $t:tt ; $len:expr ]) => { (0..$len).map(|_| fread_value!($iter, $t)).collect::<Vec<_>>() };
    ($iter:expr, u128) => { $iter.parse_uint::<u128>() };
    ($iter:expr, usize) => { $iter.parse_uint::<usize>() };
    ($iter:expr, usize1) => { $iter.parse_uint::<usize>() - 1 };
    ($iter:expr, u64) => { $iter.parse_uint::<u64>() };
    ($iter:expr, u64_1) => { $iter.parse_uint::<u64>() - 1 };
    ($iter:expr, u32) => { $iter.parse_uint::<u32>() };
    ($iter:expr, u32_1) => { $iter.parse_uint::<u32>() - 1 };
    ($iter:expr, u16) => { $iter.parse_uint::<u16>() };
    ($iter:expr, u8) => { $iter.parse_uint::<u8>() };
    ($iter:expr, i128) => { $iter.parse_iint::<i128>() };
    ($iter:expr, isize) => { $iter.parse_iint::<isize>() };
    ($iter:expr, i64) => { $iter.parse_iint::<i64>() };
    ($iter:expr, i32) => { $iter.parse_iint::<i32>() };
    ($iter:expr, i16) => { $iter.parse_iint::<i16>() };
    ($iter:expr, i8) => { $iter.parse_iint::<i16>() as i8 };
    ($iter:expr, byte) => { $iter.get_ascii_byte().unwrap() };
    ($iter:expr, Bytes) => {{ let mut v = vec![];$iter.get_ascii_bytes(&mut v);v }};
    ($iter:expr, Chars) => {{ let mut v = vec![];$iter.get_ascii_chars(&mut v);v }};
    ($iter:expr, String) => {{ let mut v = vec![];$iter.get_ascii_bytes(&mut v);unsafe { std::string::String::from_utf8_unchecked(v) }}};
    ($iter:expr, LineBytes) => {{ let mut v = vec![];$iter.get_ascii_line_bytes(&mut v).and(Some(v)).unwrap() }};
    ($iter:expr, LineBytesTrim) => {{ let mut v = vec![];$iter.get_ascii_line_bytes_trim(&mut v);v }};
    ($iter:expr, LineString) => {{ let mut v = vec![];$iter.get_ascii_line_bytes(&mut v);unsafe { std::string::String::from_utf8_unchecked(v) }}};
    ($iter:expr, LineStringTrim) => {{ let mut v = vec![];$iter.get_ascii_line_bytes_trim(&mut v);unsafe { std::string::String::from_utf8_unchecked(v) }}};
    ($iter:expr, Utf8Bytes) => {{ let mut v = vec![];$iter.get_utf8_bytes(&mut v);v }};
    ($iter:expr, Utf8String) => {{ let mut v = vec![];$iter.get_utf8_bytes(&mut v);unsafe { std::string::String::from_utf8_unchecked(v) }}};
    ($iter:expr, Utf8LineBytes) => {{ let mut v = vec![];$iter.get_utf8_line_bytes(&mut v);v }};
    ($iter:expr, Utf8LineBytesTrim) => {{ let mut v = vec![];$iter.get_utf8_line_bytes_trim(&mut v);v }};
    ($iter:expr, Utf8LineString) => {{ let mut v = vec![];$iter.get_utf8_line_bytes(&mut v);unsafe { std::string::String::from_utf8_unchecked(v) }}};
    ($iter:expr, Utf8LineStringTrim) => {{ let mut v = vec![];$iter.get_utf8_line_bytes_trim(&mut v);unsafe { std::string::String::from_utf8_unchecked(v) }}};
    ($iter:expr, $t:ty) => {{ let mut v = vec![];unsafe { std::string::String::from_utf8_unchecked($iter.get_utf8_bytes(&mut v).and(Some(v)).unwrap()) }.parse::<$t>().expect("Parse error") }};
}

fn solve() {
    let stdin = std::io::stdin();
    let mut source = ProconIBufIter::new(stdin.lock());
    macro_rules! finput { ($($r:tt)*) => { finput_inner!{source, $($r)*} }; }
    //use std::io::Write;
    //let out = std::io::stdout();
    //let mut out = std::io::BufWriter::new(out.lock());
    //let err = std::io::stderr();
    //let mut err = std::io::BufWriter::new(err.lock());
    finput! {
        n: usize, m: u32,
        mut a: [u32; n],
    }

    a.sort_unstable();
    let mut cum_sum = 0u64;
    let mut cum_sum_vec = Vec::with_capacity(n + 1);
    unsafe {
        let cum_sum_ptr = cum_sum_vec.as_mut_ptr();
        let mut cum_sum_cur = cum_sum_ptr;
        *cum_sum_cur = 0;
        cum_sum_cur = cum_sum_cur.add(1);
        for &ae in &a {
            cum_sum += ae as u64;
            *cum_sum_cur = cum_sum;
            cum_sum_cur = cum_sum_cur.add(1);
        }
        cum_sum_vec.set_len(
            ((cum_sum_cur as usize) - (cum_sum_ptr as usize)) / std::mem::size_of::<usize>(),
        )
    };
    let mut seq_begin = Vec::with_capacity(n + 1);
    unsafe {
        let seq_begin_ptr = seq_begin.as_mut_ptr();
        let mut seq_begin_cur = seq_begin_ptr;
        *seq_begin_cur = 0;
        seq_begin_cur = seq_begin_cur.add(1);
        let mut prev_a = a[0];
        for (i, &cur_a) in a.iter().enumerate() {
            if prev_a + 1 < cur_a {
                *seq_begin_cur = i;
                seq_begin_cur = seq_begin_cur.add(1);
            }
            prev_a = cur_a;
        }
        seq_begin.set_len(
            ((seq_begin_cur as usize) - (seq_begin_ptr as usize)) / std::mem::size_of::<usize>(),
        );
    }
    let mut remain_min = cum_sum;
    let mut cum_sum_prev = 0;
    for &seq_cur in &seq_begin {
        let cum_sum_cur = cum_sum_vec[seq_cur];
        remain_min.chmin(cum_sum - cum_sum_cur + cum_sum_prev);
        cum_sum_prev = cum_sum_cur;
    }
    if seq_begin.len() == 1 {
        remain_min.chmin(0);
    } else if a[0] == 0 && a[n - 1] == m - 1 {
        remain_min.chmin(cum_sum_vec[seq_begin[seq_begin.len() - 1]] - cum_sum_vec[seq_begin[1]]);
    } else {
        remain_min.chmin(cum_sum_vec[seq_begin[seq_begin.len() - 1]]);
    }
    println!("{}", remain_min);
    //writeln!(&mut out, "{}", count).unwrap();
    //writeln!(&mut err, "{}", count).unwrap();
    //out.flush().unwrap();
    //err.flush().unwrap();
}
fn main() {
    // In order to avoid potential stack overflow, spawn a new thread.
    let stack_size = 134_217_728; // 128 MB
    let thd = std::thread::Builder::new().stack_size(stack_size);
    thd.spawn(|| solve()).unwrap().join().unwrap();
}

/// chmax, chmin sugar syntax
trait Change {
    fn chmax(&mut self, x: Self);
    fn chmin(&mut self, x: Self);
}
impl<T: PartialOrd> Change for T {
    fn chmax(&mut self, x: T) {
        if *self < x {
            *self = x;
        }
    }
    fn chmin(&mut self, x: T) {
        if *self > x {
            *self = x;
        }
    }
}
/// Interaction with `std::io::BufRead` Trait, Implementation of `Iterator<Item = u8>`
pub struct ProconIBufIter<R: std::io::BufRead> {
    inner: R,
    raw: *const u8,
    len: usize,
    ptr: *const u8,
    end: *const u8,
}
unsafe fn ptr_offset_u8(dist: *const u8, origin: *const u8) -> usize {
    // Rust 1.47.0 or later, `dist.offset_from(origin) as usize`
    // <https://doc.rust-lang.org/std/primitive.pointer.html#method.offset_from>
    dist as usize - origin as usize
}
impl<R: std::io::BufRead> ProconIBufIter<R> {
    /// consume raw buffer
    #[allow(unused)]
    fn consume(&mut self, amt: usize) {
        let remain = unsafe { ptr_offset_u8(self.end, self.ptr) };
        assert!(remain >= amt);
        unsafe {
            self.ptr = self.ptr.add(amt);
        }
    }
    /// read when buffer is empty
    unsafe fn inner_read(&mut self) -> bool {
        assert!(self.is_empty());
        self.inner.consume(self.len);
        let buffer = self.inner.fill_buf().unwrap();
        let raw = buffer.as_ptr();
        let len = buffer.len();
        self.raw = raw;
        self.len = len;
        self.ptr = raw;
        self.end = raw.add(len);
        self.len > 0
    }
    /// check end of buffer
    fn is_empty(&self) -> bool {
        self.ptr == self.end
    }
    /// Interaction with `std::io::BufRead` Trait, Implementation of `Iterator<Item = u8>`
    #[allow(unused)]
    fn new(inner: R) -> Self {
        let mut bufiter = Self {
            inner,
            raw: std::ptr::null(),
            len: 0,
            ptr: std::ptr::null(),
            end: std::ptr::null(),
        };
        unsafe { bufiter.inner_read() };
        bufiter
    }
    /// next(), but return empty value
    #[allow(unused)]
    fn next_unread(&mut self) -> Option<()> {
        if self.is_empty() && unsafe { !self.inner_read() } {
            return None;
        }
        unsafe {
            self.ptr = self.ptr.add(1);
        }
        return Some(());
    }
    /// get now pointer & increment pointer
    unsafe fn next_unchecked(&mut self) -> u8 {
        let p = self.ptr;
        self.ptr = p.add(1);
        *p
    }
    /// peek
    #[allow(unused)]
    fn peek(&mut self) -> Option<&u8> {
        if !self.is_empty() || unsafe { self.inner_read() } {
            unsafe { Some(&*self.ptr) }
        } else {
            None
        }
    }
    /// raw buffer
    #[allow(unused)]
    fn raw_buf(&mut self) -> &[u8] {
        if self.is_empty() {
            unsafe {
                self.inner_read();
            }
        }
        unsafe { std::slice::from_raw_parts(self.ptr, ptr_offset_u8(self.end, self.ptr)) }
    }
    /// skip unmatch bytes
    fn skipuntil_bytes_fn<F: FnMut(u8) -> bool>(&mut self, f: &mut F) -> bool {
        loop {
            let mut ptr = self.ptr;
            while ptr != self.end {
                if f(unsafe { *ptr }) {
                    self.ptr = ptr;
                    return true;
                }
                unsafe {
                    ptr = ptr.add(1);
                }
            }
            self.ptr = ptr;
            if unsafe { !self.inner_read() } {
                return false;
            }
        }
    }
}
impl<R: std::io::BufRead> Iterator for ProconIBufIter<R> {
    type Item = u8;
    /// fetch next byte
    fn next(&mut self) -> Option<Self::Item> {
        if !self.is_empty() || unsafe { self.inner_read() } {
            unsafe { Some(self.next_unchecked()) }
        } else {
            None
        }
    }
    /// remain size hint
    fn size_hint(&self) -> (usize, Option<usize>) {
        (unsafe { ptr_offset_u8(self.end, self.ptr) }, None)
    }
}
impl<R: std::io::BufRead> Drop for ProconIBufIter<R> {
    /// Saving the pointer on interruption
    fn drop(&mut self) {
        self.inner
            .consume(unsafe { ptr_offset_u8(self.ptr, self.raw) });
    }
}
/// speed frenzy input parser for program compete (fail parse may cause panic)
trait ProconParse {
    /// parse unsigned integer
    fn parse_uint<
        U: Copy
            + std::cmp::Ord
            + std::ops::BitAnd<Output = U>
            + std::ops::Add<Output = U>
            + std::ops::Sub<Output = U>
            + std::ops::Mul<Output = U>
            + std::convert::From<u8>,
    >(
        &mut self,
    ) -> U;
    /// parse signed integer
    fn parse_iint<
        I: Copy
            + std::cmp::Ord
            + std::ops::BitAnd<Output = I>
            + std::ops::Add<Output = I>
            + std::ops::Sub<Output = I>
            + std::ops::Mul<Output = I>
            + std::convert::From<u8>
            + std::ops::Neg<Output = I>,
    >(
        &mut self,
    ) -> I;
    /// get char (printable ascii char)
    fn parse_byte(&mut self) -> Option<u8>;
    /// get chars (printable ascii word)
    fn parse_bytes(&mut self) -> Vec<u8>;
    /// get line chars (sp+printable ascii)
    fn parse_line_bytes(&mut self) -> Vec<u8>;
    /// get line chars (trimed sp+printable ascii)
    fn parse_line_bytes_trim(&mut self) -> Vec<u8>;
}
/// speed frenzy input byte reader for program compete
trait ProconBytes {
    /// get bytes
    fn get_bytes_fn<F: Fn(u8) -> bool>(&mut self, vec: &mut Vec<u8>, f: &mut F);
    /// get chars
    fn get_ascii_chars_fn<F: Fn(u8) -> bool>(&mut self, vec: &mut Vec<char>, f: &mut F);
    /// get byte (printable ascii char)
    fn get_ascii_byte(&mut self) -> Option<u8>;
    /// get bytes (printable ascii word)
    fn get_ascii_bytes(&mut self, vec: &mut Vec<u8>);
    /// get chars (printable ascii word)
    fn get_ascii_chars(&mut self, vec: &mut Vec<char>);
    /// get line bytes (sp+printable ascii)
    fn get_ascii_line_bytes(&mut self, vec: &mut Vec<u8>);
    /// get line bytes (trimed sp+printable ascii)
    fn get_ascii_line_bytes_trim(&mut self, vec: &mut Vec<u8>);
    /// get bytes (printable utf8 word)
    fn get_utf8_bytes(&mut self, vec: &mut Vec<u8>);
    /// get line bytes (sp+printable utf8)
    fn get_utf8_line_bytes(&mut self, vec: &mut Vec<u8>);
    /// get line bytes (trimed sp+printable utf8)
    fn get_utf8_line_bytes_trim(&mut self, vec: &mut Vec<u8>);
}
impl<T: Iterator<Item = u8>> ProconParse for T {
    fn parse_uint<
        U: Copy
            + std::cmp::Ord
            + std::ops::BitAnd<Output = U>
            + std::ops::Add<Output = U>
            + std::ops::Sub<Output = U>
            + std::ops::Mul<Output = U>
            + std::convert::From<u8>,
    >(
        &mut self,
    ) -> U {
        loop {
            match self.next() {
                Some(c @ b'0'..=b'9') => {
                    let mut x = U::from(c.wrapping_sub(b'0'));
                    while let Some(c @ b'0'..=b'9') = self.next() {
                        x = x.mul(U::from(10)).add(U::from(c.wrapping_sub(b'0')));
                    }
                    break x;
                }
                Some(_) => continue,
                None => break U::from(0),
            }
        }
    }
    fn parse_iint<
        I: Copy
            + std::cmp::Ord
            + std::ops::BitAnd<Output = I>
            + std::ops::Add<Output = I>
            + std::ops::Sub<Output = I>
            + std::ops::Mul<Output = I>
            + std::ops::Neg<Output = I>
            + std::convert::From<u8>,
    >(
        &mut self,
    ) -> I {
        loop {
            match self.next() {
                Some(c @ b'0'..=b'9') => {
                    let mut x = I::from(c.wrapping_sub(b'0'));
                    while let Some(c @ b'0'..=b'9') = self.next() {
                        x = x.mul(I::from(10)).add(I::from(c.wrapping_sub(b'0')));
                    }
                    break x;
                }
                Some(b'-') => {
                    let mut x = if let Some(c @ b'0'..=b'9') = self.next() {
                        I::from(c.wrapping_sub(b'0')).neg()
                    } else {
                        break I::from(0);
                    };
                    while let Some(c @ b'0'..=b'9') = self.next() {
                        x = x.mul(I::from(10)).sub(I::from(c.wrapping_sub(b'0')));
                    }
                    break x;
                }
                Some(_) => continue,
                None => break I::from(0),
            }
        }
    }
    fn parse_byte(&mut self) -> Option<u8> {
        loop {
            match self.next() {
                Some(c @ b'!'..=b'~') => break Some(c),
                Some(_) => continue,
                None => break None,
            }
        }
    }
    fn parse_bytes(&mut self) -> Vec<u8> {
        let mut v = vec![];
        loop {
            match self.next() {
                Some(c @ b'!'..=b'~') => {
                    v.push(c);
                    while let Some(c @ b'!'..=b'~') = self.next() {
                        v.push(c);
                    }
                    break v;
                }
                Some(_) => continue,
                None => break v,
            }
        }
    }
    fn parse_line_bytes(&mut self) -> Vec<u8> {
        let mut v = vec![];
        loop {
            match self.next() {
                Some(c @ b' '..=b'~') => {
                    v.push(c);
                    while let Some(c @ b' '..=b'~') = self.next() {
                        v.push(c);
                    }
                    break v;
                }
                Some(_) => continue,
                None => break v,
            }
        }
    }
    fn parse_line_bytes_trim(&mut self) -> Vec<u8> {
        let mut v = vec![];
        loop {
            match self.next() {
                Some(c @ b'!'..=b'~') => {
                    v.push(c);
                    while let Some(c @ b' '..=b'~') = self.next() {
                        v.push(c);
                    }
                    while v.last() == Some(&b' ') {
                        v.pop();
                    }
                    break v;
                }
                Some(_) => continue,
                None => break v,
            }
        }
    }
}
impl<R: std::io::BufRead> ProconBytes for ProconIBufIter<R> {
    /// get bytes vector
    fn get_bytes_fn<F: Fn(u8) -> bool>(&mut self, vec: &mut Vec<u8>, f: &mut F) {
        if !self.skipuntil_bytes_fn(f) {
            return;
        }
        let begin_ptr = self.ptr;
        let mut ptr = self.ptr;
        loop {
            unsafe {
                ptr = ptr.add(1);
            }
            if ptr == self.end {
                self.ptr = ptr;
                vec.extend_from_slice(unsafe {
                    std::slice::from_raw_parts(begin_ptr, ptr_offset_u8(ptr, begin_ptr))
                });
                break;
            }
            if !f(unsafe { *ptr }) {
                self.ptr = ptr;
                vec.extend_from_slice(unsafe {
                    std::slice::from_raw_parts(begin_ptr, ptr_offset_u8(ptr, begin_ptr))
                });
                return;
            }
        }
        if unsafe { !self.inner_read() } {
            return;
        }
        ptr = self.ptr;
        loop {
            if !f(unsafe { *ptr }) {
                self.ptr = ptr;
                vec.extend_from_slice(unsafe {
                    std::slice::from_raw_parts(self.raw, ptr_offset_u8(ptr, self.raw))
                });
                return;
            }
            unsafe {
                ptr = ptr.add(1);
            }
            if ptr == self.end {
                self.ptr = ptr;
                vec.extend_from_slice(unsafe { std::slice::from_raw_parts(self.raw, self.len) });
                if unsafe { !self.inner_read() } {
                    return;
                }
                ptr = self.ptr;
            }
        }
    }
    fn get_ascii_chars_fn<F: Fn(u8) -> bool>(&mut self, vec: &mut Vec<char>, f: &mut F) {
        if !self.skipuntil_bytes_fn(f) {
            return;
        }
        let begin_ptr = self.ptr;
        let mut ptr = self.ptr;
        loop {
            unsafe {
                ptr = ptr.add(1);
            }
            if ptr == self.end {
                self.ptr = ptr;
                let len = unsafe { ptr_offset_u8(ptr, begin_ptr) };
                vec.reserve(len);
                let mut p = begin_ptr;
                while p != ptr {
                    vec.push(unsafe { *p } as char);
                    p = unsafe { p.add(1) };
                }
                break;
            }
            if !f(unsafe { *ptr }) {
                self.ptr = ptr;
                let len = unsafe { ptr_offset_u8(ptr, begin_ptr) };
                vec.reserve(len);
                let mut p = begin_ptr;
                while p != ptr {
                    vec.push(unsafe { *p } as char);
                    p = unsafe { p.add(1) };
                }
                return;
            }
        }
        if unsafe { !self.inner_read() } {
            return;
        }
        ptr = self.ptr;
        loop {
            if !f(unsafe { *ptr }) {
                self.ptr = ptr;
                let len = unsafe { ptr_offset_u8(ptr, self.raw) };
                vec.reserve(len);
                let mut p = self.raw;
                while p != ptr {
                    vec.push(unsafe { *p } as char);
                    p = unsafe { p.add(1) };
                }
                return;
            }
            unsafe {
                ptr = ptr.add(1);
            }
            if ptr == self.end {
                self.ptr = ptr;
                let len = unsafe { ptr_offset_u8(ptr, self.raw) };
                vec.reserve(len);
                let mut p = self.raw;
                while p != ptr {
                    vec.push(unsafe { *p } as char);
                    p = unsafe { p.add(1) };
                }
                if unsafe { !self.inner_read() } {
                    return;
                }
                ptr = self.ptr;
            }
        }
    }
    fn get_ascii_byte(&mut self) -> Option<u8> {
        loop {
            match self.next() {
                Some(c @ b'!'..=b'~') => break Some(c),
                Some(_) => continue,
                None => break None,
            }
        }
    }
    fn get_ascii_bytes(&mut self, vec: &mut Vec<u8>) {
        self.get_bytes_fn(vec, &mut |c| (b'!'..=b'~').contains(&c))
    }
    fn get_ascii_chars(&mut self, vec: &mut Vec<char>) {
        self.get_ascii_chars_fn(vec, &mut |c| (b'!'..=b'~').contains(&c))
    }
    fn get_ascii_line_bytes(&mut self, vec: &mut Vec<u8>) {
        self.get_bytes_fn(vec, &mut |c| (b' '..=b'~').contains(&c))
    }
    fn get_ascii_line_bytes_trim(&mut self, vec: &mut Vec<u8>) {
        self.skipuntil_bytes_fn(&mut |c| (b'!'..=b'~').contains(&c));
        self.get_bytes_fn(vec, &mut |c| (b' '..=b'~').contains(&c));
        while vec.last() == Some(&b' ') {
            vec.pop();
        }
    }
    fn get_utf8_bytes(&mut self, vec: &mut Vec<u8>) {
        self.get_bytes_fn(vec, &mut |c| (b'!'..=0xf4).contains(&c))
    }
    fn get_utf8_line_bytes(&mut self, vec: &mut Vec<u8>) {
        self.get_bytes_fn(vec, &mut |c| (b' '..=0xf4).contains(&c))
    }
    fn get_utf8_line_bytes_trim(&mut self, vec: &mut Vec<u8>) {
        self.skipuntil_bytes_fn(&mut |c| (b'!'..=0xf4).contains(&c));
        self.get_bytes_fn(vec, &mut |c| (b' '..=0xf4).contains(&c));
        while vec.last() == Some(&b' ') {
            vec.pop();
        }
    }
}

Submission Info

Submission Time
Task D - Takahashi's Solitaire
User mizarjp
Language Rust (1.42.0)
Score 400
Code Size 22945 Byte
Status AC
Exec Time 23 ms
Memory 4716 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 3
AC × 40
Set Name Test Cases
Sample example0.txt, example1.txt, example2.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, example0.txt, example1.txt, example2.txt
Case Name Status Exec Time Memory
000.txt AC 7 ms 2140 KiB
001.txt AC 6 ms 3324 KiB
002.txt AC 8 ms 3364 KiB
003.txt AC 16 ms 3428 KiB
004.txt AC 17 ms 3308 KiB
005.txt AC 18 ms 3328 KiB
006.txt AC 16 ms 3308 KiB
007.txt AC 8 ms 3364 KiB
008.txt AC 7 ms 3448 KiB
009.txt AC 6 ms 3340 KiB
010.txt AC 2 ms 2084 KiB
011.txt AC 14 ms 2784 KiB
012.txt AC 20 ms 4448 KiB
013.txt AC 17 ms 4668 KiB
014.txt AC 17 ms 4616 KiB
015.txt AC 17 ms 4668 KiB
016.txt AC 18 ms 4676 KiB
017.txt AC 23 ms 4716 KiB
018.txt AC 17 ms 4672 KiB
019.txt AC 9 ms 3304 KiB
020.txt AC 9 ms 3340 KiB
021.txt AC 13 ms 3356 KiB
022.txt AC 13 ms 3324 KiB
023.txt AC 20 ms 3372 KiB
024.txt AC 21 ms 3408 KiB
025.txt AC 22 ms 3312 KiB
026.txt AC 18 ms 3344 KiB
027.txt AC 16 ms 3340 KiB
028.txt AC 21 ms 3452 KiB
029.txt AC 17 ms 3372 KiB
030.txt AC 19 ms 3348 KiB
031.txt AC 18 ms 3396 KiB
032.txt AC 19 ms 3376 KiB
033.txt AC 22 ms 3312 KiB
034.txt AC 23 ms 3332 KiB
035.txt AC 17 ms 3284 KiB
036.txt AC 17 ms 3312 KiB
example0.txt AC 1 ms 1992 KiB
example1.txt AC 1 ms 2160 KiB
example2.txt AC 1 ms 2052 KiB