torus711 のアレ

主に競技プログラミングの問題について書きます

Codeforces #153, Division 2, A : Little Xor

概要

非負整数の列が与えられる。
連続するいくつかの項の XOR のうち、最大のものを答えよ。

解法

始点・終点を全部試せば解けます。
XOR の計算をナイーブにやっても全体で O( N^3 ) なので間に合います。

コード

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;
}