43 lines
1.2 KiB
Rust
43 lines
1.2 KiB
Rust
use std::io::{self, BufRead, Write, BufWriter};
|
|
|
|
fn fib_usage(n: usize, storage: &mut [Option<(usize, usize)>]) -> Option<(usize, usize)>{
|
|
if let Some(numbers) = storage[n]{
|
|
Some(numbers)
|
|
}
|
|
else{
|
|
let num1 = fib_usage(n - 1, storage).unwrap();
|
|
let num2 = fib_usage(n - 2, storage).unwrap();
|
|
let num = (num1.0 + num2.0, num1.1 + num2.1);
|
|
storage[n] = Some(num);
|
|
Some(num)
|
|
}
|
|
}
|
|
|
|
|
|
fn main(){
|
|
let stdin = io::stdin();
|
|
let mut lock_in = stdin.lock();
|
|
|
|
let stdout = io::stdout();
|
|
let lock_out = stdout.lock();
|
|
let mut buff = BufWriter::new(lock_out);
|
|
|
|
let mut storage : [Option<(usize, usize)>; 41] = [None; 41];
|
|
storage[0] = Some((1, 0));
|
|
storage[1] = Some((0, 1));
|
|
|
|
let mut n = String::new();
|
|
lock_in.read_line(&mut n).expect("Failed to read line");
|
|
let n = n.trim().parse::<usize>().expect("Not an integer");
|
|
|
|
for _i in 0..n{
|
|
let mut k = String::new();
|
|
lock_in.read_line(&mut k).expect("Failed to read line");
|
|
let k = k.trim().parse::<usize>().expect("Not an integer");
|
|
|
|
let numbers = fib_usage(k, &mut storage).unwrap();
|
|
buff.write_fmt(format_args!("{} {}\n", numbers.0, numbers.1)).expect("Failed to write");
|
|
}
|
|
}
|
|
|