pub struct Scanner<'a> { /* private fields */ }
Implementations§
Source§impl<'a> Scanner<'a>
impl<'a> Scanner<'a>
Sourcepub fn new(s: &'a str) -> Self
pub fn new(s: &'a str) -> Self
Examples found in repository?
More examples
crates/library_checker/src/string/zalgorithm.rs (line 8)
6pub fn zalgorithm(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, s: Chars);
10 let z = Zarray::new(&s);
11 iter_print!(writer, @it (0..s.len()).map(|i| z[i]));
12}
13
14#[verify::library_checker("zalgorithm")]
15pub fn zalgorithm_rolling_hash(reader: impl Read, mut writer: impl Write) {
16 let s = read_all_unchecked(reader);
17 let mut scanner = Scanner::new(&s);
18 scan!(scanner, s: Bytes);
19 Mersenne61x1::init(s.len());
20 let h = Mersenne61x1::hash_sequence(s.iter().map(|&c| c as _));
21 let ans = (0..s.len()).map(|i| h.range(..).longest_common_prefix(&h.range(i..)));
22 iter_print!(writer, @it ans);
23}
Additional examples can be found in:
- crates/library_checker/src/string/suffixarray.rs
- crates/aizu_online_judge/src/dpl/dpl_3_b.rs
- crates/library_checker/src/math/convolution_mod.rs
- crates/library_checker/src/math/exp_of_formal_power_series.rs
- crates/library_checker/src/math/inv_of_formal_power_series.rs
- crates/library_checker/src/math/log_of_formal_power_series.rs
- crates/library_checker/src/math/find_linear_recurrence.rs
- crates/aizu_online_judge/src/grl/grl_4_a.rs
- crates/library_checker/src/math/pow_of_formal_power_series.rs
- crates/aizu_online_judge/src/dpl/dpl_1_d.rs
- crates/library_checker/src/math/sum_of_floor_of_linear.rs
- crates/library_checker/src/math/counting_primes.rs
- crates/aizu_online_judge/src/grl/grl_4_b.rs
- crates/library_checker/src/math/subset_convolution.rs
- crates/library_checker/src/math/convolution_mod_1000000007.rs
- crates/library_checker/src/math/bitwise_and_convolution.rs
- crates/aizu_online_judge/src/dpl/dpl_1_h.rs
- crates/library_checker/src/math/multipoint_evaluation.rs
- crates/aizu_online_judge/src/dpl/dpl_1_c.rs
- crates/aizu_online_judge/src/dpl/dpl_1_b.rs
- crates/library_checker/src/datastructure/range_kth_smallest.rs
- crates/library_checker/src/math/discrete_logarithm_mod.rs
- crates/aizu_online_judge/src/dpl/dpl_1_g.rs
- crates/library_checker/src/math/polynomial_taylor_shift.rs
- crates/library_checker/src/math/sqrt_of_formal_power_series.rs
- crates/library_checker/src/math/kth_term_of_linearly_recurrent_sequence.rs
- crates/aizu_online_judge/src/grl/grl_2_b.rs
- crates/library_checker/src/datastructure/staticrmq.rs
- crates/aizu_online_judge/src/dpl/dpl_1_a.rs
- crates/aizu_online_judge/src/dpl/dpl_1_f.rs
- crates/library_checker/src/string/number_of_substrings.rs
- crates/library_checker/src/graph/directedmst.rs
- crates/aizu_online_judge/src/grl/grl_5_b.rs
- crates/aizu_online_judge/src/grl/grl_2_a.rs
- crates/aizu_online_judge/src/grl/grl_3_b.rs
- crates/library_checker/src/math/gcd_convolution.rs
- crates/library_checker/src/math/lcm_convolution.rs
- crates/aizu_online_judge/src/dsl/dsl_1_a.rs
- crates/library_checker/src/datastructure/unionfind.rs
- crates/aizu_online_judge/src/grl/grl_3_a.rs
- crates/library_checker/src/math/sqrt_mod.rs
- crates/library_checker/src/math/factorize.rs
- crates/aizu_online_judge/src/dsl/dsl_2_a.rs
- crates/aizu_online_judge/src/grl/grl_6_a.rs
- crates/aizu_online_judge/src/dsl/dsl_5_a.rs
- crates/aizu_online_judge/src/grl/grl_3_c.rs
- crates/aizu_online_judge/src/dsl/dsl_2_b.rs
- crates/library_checker/src/math/min_of_mod_of_linear.rs
- crates/library_checker/src/math/enumerate_primes.rs
- crates/library_checker/src/math/sharp_p_subset_sum.rs
- crates/aizu_online_judge/src/dsl/dsl_3_d.rs
- crates/library_checker/src/graph/scc.rs
- crates/aizu_online_judge/src/grl/grl_1_a.rs
- crates/aizu_online_judge/src/dsl/dsl_3_a.rs
- crates/aizu_online_judge/src/grl/grl_6_b.rs
- crates/aizu_online_judge/src/grl/grl_5_a.rs
- crates/aizu_online_judge/src/dsl/dsl_3_c.rs
- crates/aizu_online_judge/src/dpl/dpl_1_i.rs
- crates/aizu_online_judge/src/dsl/dsl_2_c.rs
- crates/library_checker/src/graph/lca.rs
- crates/aizu_online_judge/src/dsl/dsl_1_b.rs
- crates/library_checker/src/datastructure/line_add_get_min.rs
- crates/aizu_online_judge/src/dsl/dsl_2_d.rs
- crates/aizu_online_judge/src/dsl/dsl_2_f.rs
- crates/aizu_online_judge/src/dsl/dsl_2_h.rs
- crates/aizu_online_judge/src/dsl/dsl_2_e.rs
- crates/aizu_online_judge/src/dsl/dsl_2_g.rs
- crates/aizu_online_judge/src/grl/grl_5_c.rs
- crates/aizu_online_judge/src/dsl/dsl_2_i.rs
- crates/aizu_online_judge/src/grl/grl_1_b.rs
- crates/aizu_online_judge/src/grl/grl_7_a.rs
- crates/aizu_online_judge/src/dsl/dsl_3_b.rs
- crates/library_checker/src/datastructure/point_add_range_sum.rs
- crates/library_checker/src/datastructure/point_set_range_composite.rs
- crates/library_checker/src/datastructure/queue_operate_all_composite.rs
- crates/library_checker/src/datastructure/range_affine_range_sum.rs
- crates/aizu_online_judge/src/dsl/dsl_5_b.rs
- crates/library_checker/src/graph/bipartitematching.rs
- crates/aizu_online_judge/src/grl/grl_1_c.rs
- crates/library_checker/src/math/sum_of_totient_function.rs
- crates/library_checker/src/math/two_sat.rs
- crates/library_checker/src/datastructure/deque_operate_all_composite.rs
- crates/library_checker/src/datastructure/vertex_add_path_sum.rs
- crates/library_checker/src/datastructure/vertex_add_subtree_sum.rs
- crates/library_checker/src/datastructure/dynamic_sequence_range_affine_range_sum.rs
- crates/aizu_online_judge/src/grl/grl_5_e.rs
- crates/aizu_online_judge/src/grl/grl_5_d.rs
- crates/library_checker/src/datastructure/range_chmin_chmax_add_range_sum.rs
- crates/library_checker/src/datastructure/vertex_set_path_composite.rs
- crates/aizu_online_judge/src/dsl/dsl_4_a.rs
- crates/library_checker/src/math/stern_brocot_tree.rs
Sourcepub fn scan<T>(&mut self) -> <T as IterScan>::Outputwhere
T: IterScan,
pub fn scan<T>(&mut self) -> <T as IterScan>::Outputwhere
T: IterScan,
Examples found in repository?
crates/aizu_online_judge/src/dsl/dsl_2_d.rs (line 12)
6pub fn dsl_2_d(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, q);
10 let mut seg = LazySegmentTree::<RangeMinRangeUpdate<_>>::new(n);
11 for _ in 0..q {
12 match scanner.scan::<usize>() {
13 0 => {
14 scan!(scanner, s, t, x: i32);
15 seg.update(s..t + 1, Some(x));
16 }
17 1 => {
18 scan!(scanner, i);
19 writeln!(writer, "{}", seg.fold(i..i + 1)).ok();
20 }
21 _ => panic!("unknown query"),
22 }
23 }
24}
More examples
crates/aizu_online_judge/src/dsl/dsl_2_f.rs (line 12)
6pub fn dsl_2_f(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, q);
10 let mut seg = LazySegmentTree::<RangeMinRangeUpdate<_>>::new(n);
11 for _ in 0..q {
12 match scanner.scan::<usize>() {
13 0 => {
14 scan!(scanner, s, t, x: i32);
15 seg.update(s..t + 1, Some(x));
16 }
17 1 => {
18 scan!(scanner, s, t);
19 writeln!(writer, "{}", seg.fold(s..t + 1)).ok();
20 }
21 _ => panic!("unknown query"),
22 }
23 }
24}
crates/aizu_online_judge/src/dsl/dsl_2_h.rs (line 12)
6pub fn dsl_2_h(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, q);
10 let mut seg = LazySegmentTree::<RangeMinRangeAdd<_>>::from_vec(vec![0; n]);
11 for _ in 0..q {
12 match scanner.scan::<usize>() {
13 0 => {
14 scan!(scanner, s, t, x: i64);
15 seg.update(s..t + 1, x);
16 }
17 1 => {
18 scan!(scanner, s, t);
19 writeln!(writer, "{}", seg.fold(s..t + 1)).ok();
20 }
21 _ => panic!("unknown query"),
22 }
23 }
24}
crates/aizu_online_judge/src/dsl/dsl_2_e.rs (line 12)
6pub fn dsl_2_e(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, q);
10 let mut seg = LazySegmentTree::<RangeSumRangeAdd<_>>::from_vec(vec![(0, 1); n]);
11 for _ in 0..q {
12 match scanner.scan::<usize>() {
13 0 => {
14 scan!(scanner, s, t, x: u64);
15 seg.update(s - 1..t, x);
16 }
17 1 => {
18 scan!(scanner, i);
19 writeln!(writer, "{}", seg.fold(i - 1..i).0).ok();
20 }
21 _ => panic!("unknown query"),
22 }
23 }
24}
crates/aizu_online_judge/src/dsl/dsl_2_g.rs (line 12)
6pub fn dsl_2_g(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, q);
10 let mut seg = LazySegmentTree::<RangeSumRangeAdd<_>>::from_vec(vec![(0, 1); n]);
11 for _ in 0..q {
12 match scanner.scan::<usize>() {
13 0 => {
14 scan!(scanner, s, t, x: u64);
15 seg.update(s - 1..t, x);
16 }
17 1 => {
18 scan!(scanner, s, t);
19 writeln!(writer, "{}", seg.fold(s - 1..t).0).ok();
20 }
21 _ => panic!("unknown query"),
22 }
23 }
24}
crates/aizu_online_judge/src/dsl/dsl_2_i.rs (line 12)
6pub fn dsl_2_i(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, q);
10 let mut seg = LazySegmentTree::<RangeSumRangeUpdate<_>>::from_vec(vec![(0, 1); n]);
11 for _ in 0..q {
12 match scanner.scan::<usize>() {
13 0 => {
14 scan!(scanner, s, t, x: i64);
15 seg.update(s..t + 1, Some(x));
16 }
17 1 => {
18 scan!(scanner, s, t);
19 writeln!(writer, "{}", seg.fold(s..t + 1).0).ok();
20 }
21 _ => panic!("unknown query"),
22 }
23 }
24}
Additional examples can be found in:
- crates/library_checker/src/datastructure/point_add_range_sum.rs
- crates/library_checker/src/datastructure/point_set_range_composite.rs
- crates/library_checker/src/datastructure/queue_operate_all_composite.rs
- crates/library_checker/src/datastructure/range_affine_range_sum.rs
- crates/library_checker/src/datastructure/deque_operate_all_composite.rs
- crates/library_checker/src/datastructure/vertex_add_path_sum.rs
- crates/library_checker/src/datastructure/vertex_add_subtree_sum.rs
- crates/library_checker/src/datastructure/dynamic_sequence_range_affine_range_sum.rs
- crates/aizu_online_judge/src/grl/grl_5_e.rs
- crates/aizu_online_judge/src/grl/grl_5_d.rs
- crates/library_checker/src/datastructure/range_chmin_chmax_add_range_sum.rs
- crates/library_checker/src/datastructure/vertex_set_path_composite.rs
pub fn mscan<T>(&mut self, marker: T) -> <T as MarkedIterScan>::Outputwhere
T: MarkedIterScan,
pub fn scan_vec<T>(&mut self, size: usize) -> Vec<<T as IterScan>::Output>where
T: IterScan,
Sourcepub fn iter<'b, T>(&'b mut self) -> ScannerIter<'a, 'b, T> ⓘwhere
T: IterScan,
pub fn iter<'b, T>(&'b mut self) -> ScannerIter<'a, 'b, T> ⓘwhere
T: IterScan,
Examples found in repository?
More examples
crates/library_checker/src/math/factorize.rs (line 10)
6pub fn factorize(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, q);
10 for a in scanner.iter::<u64>().take(q) {
11 let x = prime_factors_flatten(a);
12 write!(writer, "{}", x.len()).ok();
13 for x in x.into_iter() {
14 write!(writer, " {}", x).ok();
15 }
16 writeln!(writer).ok();
17 }
18}
crates/library_checker/src/graph/lca.rs (line 17)
9pub fn lca_euler_tour(reader: impl Read, mut writer: impl Write) {
10 let s = read_all_unchecked(reader);
11 let mut scanner = Scanner::new(&s);
12 scan!(scanner, n, q, p: [usize]);
13 let edges = p.take(n - 1).enumerate().map(|(i, p)| (i + 1, p)).collect();
14 let graph = UndirectedSparseGraph::from_edges(n, edges);
15 let euler = EulerTourForRichVertex::new(0, &graph);
16 let lca = euler.gen_lca::<LcaMonoidDefaultId>();
17 for (u, v) in scanner.iter::<(usize, usize)>().take(q) {
18 writeln!(writer, "{}", lca.lca(u, v)).ok();
19 }
20}
21
22#[verify::library_checker("lca")]
23pub fn lca_hld(reader: impl Read, mut writer: impl Write) {
24 let s = read_all_unchecked(reader);
25 let mut scanner = Scanner::new(&s);
26 scan!(scanner, n, q, p: [usize]);
27 let edges = p.take(n - 1).enumerate().map(|(i, p)| (i + 1, p)).collect();
28 let mut graph = UndirectedSparseGraph::from_edges(n, edges);
29 let hld = HeavyLightDecomposition::new(0, &mut graph);
30 for (u, v) in scanner.iter::<(usize, usize)>().take(q) {
31 writeln!(writer, "{}", hld.lca(u, v)).ok();
32 }
33}
crates/library_checker/src/datastructure/line_add_get_min.rs (line 11)
6pub fn line_add_get_min(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, q);
10 let mut cht = LineSet::new();
11 for (a, b) in scanner.iter::<(i64, i64)>().take(n) {
12 cht.insert(a, b);
13 }
14 for _ in 0..q {
15 scan!(scanner, ty);
16 if ty == 0 {
17 scan!(scanner, a: i64, b: i64);
18 cht.insert(a, b);
19 } else {
20 scan!(scanner, q: i64);
21 writeln!(writer, "{}", cht.query_min(q).unwrap()).ok();
22 }
23 }
24}
Additional examples can be found in:
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for Scanner<'a>
impl<'a> RefUnwindSafe for Scanner<'a>
impl<'a> Send for Scanner<'a>
impl<'a> Sync for Scanner<'a>
impl<'a> Unpin for Scanner<'a>
impl<'a> UnwindSafe for Scanner<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more