概要
非負整数の列が与えられる。
連続するいくつかの項の XOR のうち、最大のものを答えよ。
解法
始点・終点を全部試せば解けます。
XOR の計算をナイーブにやっても全体で なので間に合います。
コード
typedef vector<int> VI; #define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i ) #define EACH( v, c ) for ( auto &v : c ) int main() { cin.tie( 0 ); ios::sync_with_stdio( false ); int n; cin >> n; VI as( n ); EACH( a, as ) { cin >> a; } int res = 0; REP( i, 0, n ) { REP( j, i, n ) { int tmp = 0; REP( k, i, j + 1 ) { tmp ^= as[k]; } res = max( res, tmp ); } } cout << res << endl; return 0; }