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