From 1835efd9bf682d38a7d28baf1d4c89c571018d23 Mon Sep 17 00:00:00 2001 From: Philippe Zwietering Date: Mon, 30 May 2022 14:16:49 +0200 Subject: [PATCH] ABC 045, finished completely --- atcoder/beginner_contests/abc045/src/bin/c.rs | 12 +++- atcoder/beginner_contests/abc045/src/bin/d.rs | 65 ++++++++++++++++++- 2 files changed, 73 insertions(+), 4 deletions(-) diff --git a/atcoder/beginner_contests/abc045/src/bin/c.rs b/atcoder/beginner_contests/abc045/src/bin/c.rs index 101449c..af28f84 100644 --- a/atcoder/beginner_contests/abc045/src/bin/c.rs +++ b/atcoder/beginner_contests/abc045/src/bin/c.rs @@ -1,5 +1,12 @@ use proconio::input; +fn dfs(digits: &Vec, i: usize, sum: u64, counter: u64) -> u64{ + if i < digits.len(){ + dfs(digits, i + 1, sum + counter, digits[i]) + dfs(digits, i + 1, sum, counter * 10 + digits[i]) + } else{ + sum + counter + } +} fn main() { input!{ @@ -7,8 +14,7 @@ fn main() { }; let ns : Vec = s.chars().map(|c| u64::from(c.to_digit(10).unwrap())).collect(); - let nns = vec![ns]; - let mut result : u64 = 0; + let result = dfs(&ns, 1, 0, ns[0]); println!("{}", {result}); -} +} \ No newline at end of file diff --git a/atcoder/beginner_contests/abc045/src/bin/d.rs b/atcoder/beginner_contests/abc045/src/bin/d.rs index f329649..3d7ae72 100644 --- a/atcoder/beginner_contests/abc045/src/bin/d.rs +++ b/atcoder/beginner_contests/abc045/src/bin/d.rs @@ -1,5 +1,68 @@ use proconio::input; +use std::collections::HashSet; +use std::cmp::{min, max}; + +fn check_subrectangle(middle: (u64, u64), painted: &HashSet<(u64, u64)>) -> u64{ + let (y, x) = middle; + let mut result = 0; + + for i in (x-1)..=(x+1) { + for j in (y-1)..=(y+1) { + if painted.contains(&(j, i)){ + result += 1; + } + } + } + + result +} + +fn check_coords(painted_pair: (u64, u64), canvas_size: (u64, u64), painted: &HashSet<(u64, u64)>, checked_tiles: &mut HashSet<(u64, u64)>, result: &mut [u64; 10]){ + let (y, x) = painted_pair; + let (h, w) = canvas_size; + + for i in max(2, x - 1)..=min(x + 1, w - 1) { + for j in max(2, y - 1)..=min(y + 1, h - 1){ + if !checked_tiles.contains(&(j, i)) { + result[check_subrectangle((j, i), painted) as usize] += 1; + checked_tiles.insert((j, i)); + + // println!("({},{})", {j}, {i}); + } + } + } +} fn main() { - todo!(); + input!{ + h: u64, + w: u64, + n: u64, + ab_pairs: [(u64, u64); n], + }; + + let mut painted = HashSet::new(); + let mut checked_tiles = HashSet::new(); + let mut result = [0; 10]; + + for i in 0..n { + painted.insert(ab_pairs[i as usize]); + } + + for i in 0..n{ + let coord = ab_pairs[i as usize]; + check_coords(coord, (h, w), &painted, &mut checked_tiles, &mut result); + } + + // for r in result { + // println!("{}", {r}); + // } + + let max_rectangles = (h - 2) * (w - 2); + let current_rectangles : u64 = result.iter().sum(); + result[0] += max_rectangles - current_rectangles; + + for r in &result { + println!("{}", {r}); + } }