From adb33aa593b96e6c9e94f798c3c6e1fda8c5e8da Mon Sep 17 00:00:00 2001 From: Philippe Zwietering Date: Mon, 1 May 2023 15:49:18 +0200 Subject: [PATCH] Finished abc050 --- atcoder/beginner_contests/abc050/src/bin/d.rs | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/atcoder/beginner_contests/abc050/src/bin/d.rs b/atcoder/beginner_contests/abc050/src/bin/d.rs index ee80563..313060c 100644 --- a/atcoder/beginner_contests/abc050/src/bin/d.rs +++ b/atcoder/beginner_contests/abc050/src/bin/d.rs @@ -1,3 +1,38 @@ -fn main() { - unimplemented!(); +use std::collections::HashMap; + +use proconio::input; + +const MOD: u128 = 1000000007; + +fn solve(n: u128, memory: &mut HashMap) -> u128 { + if n == 0 { + return 1; + } else if n == 1 { + return 2; + } + + if let Some(res) = memory.get(&n) { + return *res; + } + + if n % 2 == 0 { + let res = (2 * solve(n / 2 - 1, memory) + solve(n / 2, memory)) % MOD; + memory.insert(n, res); + return res; + } else { + let res = (2 * solve(n / 2, memory) + solve(n / 2 - 1, memory)) % MOD; + memory.insert(n, res); + return res; + } +} + +fn main() { + input! { + n: u128, + }; + + let mut memory = HashMap::new(); + let result = solve(n, &mut memory); + + println!("{}", result); }