Skip to content

Commit 89e7211

Browse files
committed
add abc407d.rs
1 parent 4de1756 commit 89e7211

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

src/abc/abc407d.rs

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/** THIS IS AN OUTPUT FILE. NOT EDIT THIS FILE DIRECTLY. **/
2+
use proconio::input;
3+
use proconio::marker::*;
4+
use std::marker::PhantomData;
5+
use std::cmp::*;
6+
use std::collections::*;
7+
8+
struct Helper {
9+
rows: Vec<Vec<isize>>,
10+
result: isize
11+
}
12+
13+
impl Helper {
14+
fn dfs(&mut self, i:usize, j:usize, set: &mut HashSet<(usize,usize)>) {
15+
let n = self.rows.len();
16+
let m = self.rows[0].len();
17+
if i == n-1 && j == m-1 {
18+
return
19+
}
20+
21+
let (ni,nj) = if j+1 == m {
22+
(i+1, 0)
23+
} else {
24+
(i, j+1)
25+
};
26+
27+
self.dfs(ni, nj, set);
28+
if !set.contains(&(i, j)) {
29+
set.insert((i,j));
30+
if i+1 < n && !set.contains(&(i+1, j)) {
31+
set.insert((i+1, j));
32+
self.calc(set);
33+
self.dfs(ni, nj, set);
34+
set.remove(&(i+1, j));
35+
}
36+
37+
if j+1 < m && !set.contains(&(i, j+1)) {
38+
set.insert((i, j+1));
39+
self.calc(set);
40+
self.dfs(ni, nj, set);
41+
set.remove(&(i, j+1));
42+
}
43+
set.remove(&(i, j));
44+
}
45+
}
46+
47+
fn calc(&mut self, set: &HashSet<(usize, usize)>) {
48+
let n = self.rows.len();
49+
let m = self.rows[0].len();
50+
let mut temp = 0isize;
51+
for i in 0..n {
52+
for j in 0..m {
53+
if !set.contains(&(i, j)) {
54+
temp ^= self.rows[i][j];
55+
}
56+
}
57+
}
58+
self.result = max(self.result, temp);
59+
}
60+
}
61+
62+
fn main() {
63+
input! {
64+
h:usize,
65+
w:usize,
66+
rows:[[isize;w];h],
67+
}
68+
69+
let mut result = 0;
70+
for i in 0..h {
71+
for j in 0..w {
72+
result ^= rows[i][j];
73+
}
74+
}
75+
let mut helper = Helper {
76+
rows,
77+
result
78+
};
79+
80+
helper.dfs(0, 0, &mut HashSet::new());
81+
82+
println!("{}", helper.result);
83+
}

0 commit comments

Comments
 (0)