diff --git a/abc276/Cargo.lock b/abc276/Cargo.lock new file mode 100644 index 00000000..3fb3b67e --- /dev/null +++ b/abc276/Cargo.lock @@ -0,0 +1,161 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "abc276" +version = "0.1.0" +dependencies = [ + "num", + "proconio", + "superslice", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "num" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "proconio" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bed4f95f88d84bb8efd51dbc080d463e6ca953f05dfade2e24daf19dd861ccd" +dependencies = [ + "lazy_static", + "proconio-derive", +] + +[[package]] +name = "proconio-derive" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8096c9313b401ca5bf09f93235fdf4fe6dbedc4f64e3968d2688bf89433a6738" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "superslice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab16ced94dbd8a46c82fd81e3ed9a8727dac2977ea869d217bcc4ea1f122e81f" + +[[package]] +name = "syn" +version = "0.15.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" diff --git a/abc276/Cargo.toml b/abc276/Cargo.toml new file mode 100644 index 00000000..fd0a34af --- /dev/null +++ b/abc276/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "abc276" +version = "0.1.0" +edition = "2018" + +# dependencies added to new project +[dependencies] +num = "=0.2.1" +proconio = { version = "=0.3.6", features = ["derive"] } +superslice = "=1.0.0" + +[profile.release] +lto = true +panic = 'abort' diff --git a/abc276/rust-toolchain b/abc276/rust-toolchain new file mode 100644 index 00000000..1933dfa1 --- /dev/null +++ b/abc276/rust-toolchain @@ -0,0 +1 @@ +1.42.0 \ No newline at end of file diff --git a/abc276/src/bin/a.rs b/abc276/src/bin/a.rs new file mode 100644 index 00000000..1062743b --- /dev/null +++ b/abc276/src/bin/a.rs @@ -0,0 +1,15 @@ +use proconio::{input, marker::Chars}; + +fn main() { + input! { + s: Chars, + }; + let n = s.len(); + let ans = s + .iter() + .rev() + .position(|&c| c == 'a') + .map(|i| (n - 1 - i) as i64 + 1) + .unwrap_or(-1); + println!("{}", ans); +} diff --git a/abc276/src/bin/b.rs b/abc276/src/bin/b.rs new file mode 100644 index 00000000..41ac5c8f --- /dev/null +++ b/abc276/src/bin/b.rs @@ -0,0 +1,28 @@ +use proconio::{input, marker::Usize1}; + +fn main() { + input! { + n: usize, + m: usize, + ab: [(Usize1, Usize1); m], + }; + let mut edges = vec![vec![]; n]; + for (u, v) in ab.iter().copied() { + edges[u].push(v); + edges[v].push(u); + } + + for u in 0..n { + let mut e_u = edges[u].iter().copied().collect::>(); + e_u.sort(); + print!("{}", e_u.len()); + if !e_u.is_empty() { + print!(" "); + for (i, v) in e_u.iter().copied().enumerate() { + print!("{}{}", v + 1, if i == e_u.len() - 1 { '\n' } else { ' ' }); + } + } else { + println!(); + } + } +} diff --git a/abc276/src/bin/c.rs b/abc276/src/bin/c.rs new file mode 100644 index 00000000..ade3a1fa --- /dev/null +++ b/abc276/src/bin/c.rs @@ -0,0 +1,14 @@ +use proconio::input; +use superslice::Ext; + +fn main() { + input! { + n: usize, + mut p: [usize; n], + }; + + p.prev_permutation(); + for (i, p_i) in p.iter().copied().enumerate() { + print!("{}{}", p_i, if i == n - 1 { '\n' } else { ' ' }); + } +} diff --git a/abc276/src/bin/d.rs b/abc276/src/bin/d.rs new file mode 100644 index 00000000..0a8f7481 --- /dev/null +++ b/abc276/src/bin/d.rs @@ -0,0 +1,89 @@ +use std::collections::{HashMap, HashSet}; + +use proconio::input; + +fn prime_factorization(n: usize) -> HashMap { + let mut p = HashMap::new(); + if n < 2 { + return p; + } + let mut n = n; // shadowing + for i in 2.. { + if i * i > n { + break; + } + let mut c = 0; + while n % i == 0 { + c += 1; + n /= i; + } + if c > 0 { + p.insert(i, c); + } + } + if n != 1 { + p.insert(n, 1); + } + p +} + +fn main() { + input! { + n: usize, + a: [usize; n], + }; + + let mut ok = true; + for i in 1..n { + if a[i] != a[0] { + ok = false; + } + } + if ok { + println!("0"); + return; + } + + let mut maps = vec![]; + for a_i in a.iter().copied() { + let map = prime_factorization(a_i); + maps.push(map); + } + + let mut ok = true; + let mut map_a_0 = prime_factorization(a[0]); + map_a_0.remove(&2); + map_a_0.remove(&3); + let set_a_0 = map_a_0.keys().collect::>(); + let mut min_2 = 1_000_000_000; + let mut min_3 = 1_000_000_000; + for m in maps.iter() { + let mut map = m.clone(); + min_2 = min_2.min(*m.get(&2).unwrap_or(&0)); + min_3 = min_3.min(*m.get(&3).unwrap_or(&0)); + map.remove(&2); + map.remove(&3); + let set = map.keys().collect::>(); + if set_a_0.len() != set.len() { + ok = false; + break; + } + if set_a_0 != set { + ok = false; + break; + } + } + if !ok { + println!("-1"); + return; + } + + let mut count = 0_usize; + for m in maps.iter() { + count += *m.get(&2).unwrap_or(&0) - min_2; + count += *m.get(&3).unwrap_or(&0) - min_3; + } + + let ans = count; + println!("{}", ans); +} diff --git a/abc276/src/bin/e.rs b/abc276/src/bin/e.rs new file mode 100644 index 00000000..58941f8d --- /dev/null +++ b/abc276/src/bin/e.rs @@ -0,0 +1,80 @@ +use std::collections::VecDeque; + +use proconio::{input, marker::Chars}; + +fn main() { + input! { + h: usize, + w: usize, + c: [Chars; h], + }; + + let s = { + let mut s = (0, 0); + for i in 0..h { + for j in 0..w { + if c[i][j] == 'S' { + s = (i, j); + } + } + } + s + }; + + let mut used = vec![vec![0; w]; h]; + let mut deques = vec![]; + let dir = vec![(-1, 0), (0, -1), (0, 1), (1, 0)]; + for (dr, dc) in dir { + let (nr, nc) = (s.0 as i64 + dr, s.1 as i64 + dc); + if !(0..h as i64).contains(&nr) || !(0..w as i64).contains(&nc) { + continue; + } + let (nr, nc) = (nr as usize, nc as usize); + if c[nr][nc] == '#' { + continue; + } + let mut deque = VecDeque::new(); + deque.push_back((nr, nc)); + deques.push(deque); + used[nr][nc] = deques.len(); + } + + let mut ans = false; + loop { + let mut count = 0_usize; + for index in 0..deques.len() { + if let Some((i, j)) = deques[index].pop_front() { + let dir = vec![(-1, 0), (0, -1), (0, 1), (1, 0)]; + for (dr, dc) in dir { + let (nr, nc) = (i as i64 + dr, j as i64 + dc); + if !(0..h as i64).contains(&nr) || !(0..w as i64).contains(&nc) { + continue; + } + let (nr, nc) = (nr as usize, nc as usize); + if (nr, nc) == s { + continue; + } + if c[nr][nc] == '#' { + continue; + } + if used[nr][nc] == index + 1 { + continue; + } + if used[nr][nc] != 0 { + ans = true; + break; + } + used[nr][nc] = index + 1; + deques[index].push_back((nr, nc)); + } + } else { + count += 1; + } + } + if count == deques.len() { + break; + } + } + + println!("{}", if ans { "Yes" } else { "No" }); +} diff --git a/abc276/src/bin/ex.rs b/abc276/src/bin/ex.rs new file mode 100644 index 00000000..2a9506c8 --- /dev/null +++ b/abc276/src/bin/ex.rs @@ -0,0 +1,10 @@ +use proconio::{input, marker::Usize1}; + +fn main() { + input! { + n: usize, + a: [Usize1; n], + }; + let ans = n - a.len(); + println!("{}", ans); +} diff --git a/abc276/src/bin/f.rs b/abc276/src/bin/f.rs new file mode 100644 index 00000000..2a9506c8 --- /dev/null +++ b/abc276/src/bin/f.rs @@ -0,0 +1,10 @@ +use proconio::{input, marker::Usize1}; + +fn main() { + input! { + n: usize, + a: [Usize1; n], + }; + let ans = n - a.len(); + println!("{}", ans); +} diff --git a/abc276/src/bin/g.rs b/abc276/src/bin/g.rs new file mode 100644 index 00000000..2a9506c8 --- /dev/null +++ b/abc276/src/bin/g.rs @@ -0,0 +1,10 @@ +use proconio::{input, marker::Usize1}; + +fn main() { + input! { + n: usize, + a: [Usize1; n], + }; + let ans = n - a.len(); + println!("{}", ans); +}