abc390_d
Stone XOR の解説
ベル数 by @ohnuma
解説
ベル数を知っていれば解けます。
n = 12の時のベル数は4213597なので間に合います。
Rustの再帰はstruct使うことに決めました。
struct Solver { n: usize, a: Vec<usize>, ans: HashSet<usize>, cur: Vec<usize> } impl Solver { fn new(n:usize, a: Vec<usize>) -> Self { let set = HashSet::new(); let cur = vec![]; Self { n, a, ans: set, cur } } fn run(&mut self, v: usize) { if v == self.n { let ln = self.cur.len(); let mut now = 0; for i in 0..ln { now ^= self.cur[i]; } self.ans.insert(now); return; } let num = self.a[v]; self.cur.push(num); self.run(v + 1); self.cur.pop().unwrap(); let ln = self.cur.len(); for i in 0..ln { self.cur[i] += num; self.run(v + 1); self.cur[i] -= num; } } } fn main() { input! { n: usize, a: [usize; n] } let mut solver = Solver::new(n, a); solver.run(0); let ans = solver.ans.len(); println!("{}", ans); }