Files
CodeTest/baekjoon/N과_M_(2)/solution_19930247.rs
2024-08-29 16:22:19 +09:00

39 lines
1.1 KiB
Rust

macro_rules! parse_line {
($($t: ty),+) => ({
let mut line = String::new();
std::io::stdin().read_line(&mut line).unwrap();
let mut iter = line.split_whitespace();
($(iter.next().unwrap().parse::<$t>().unwrap()),+)
})
}
fn backtrack(vec : &mut Vec<u32>, up_limit: u32, goal_len: u32) -> String{
let len = vec.len();
let last = {if len == 0 {0} else{vec[len - 1]}};
if goal_len - (len as u32) > up_limit - last{
return "".to_string();
}
else if goal_len == len as u32{
let mut string : String = vec.iter().map(|x| format_args!("{} ", x).to_string()).collect();
string.push_str(&"\n".to_string());
return string;
}
let mut string = String::new();
for i in last+1..=up_limit{
vec.push(i);
let string2 = backtrack(vec, up_limit, goal_len);
string.push_str(&string2);
vec.pop().unwrap();
}
return string;
}
fn main(){
let (up_limit, goal_len) = parse_line!(u32, u32);
let string = &backtrack(&mut Vec::new(), up_limit, goal_len);
let len = string.len();
println!("{}", string[..len-1].to_string());
}