Source Code
#include<iostream>
using namespace std;

#include<stack>
#include<queue>
#include<set>
#include<vector>
#include<algorithm>
#include<string>
#include <functional>
#include<map>
#include<iomanip>
#include<cmath>
#include<list>

#define fst ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
typedef long long ll;
typedef unsigned long long ull;
#define all(v) v.begin(),v.end()
#define vi vector<int>
#define pii pair<int,int>
#define vll vector<ll>
#define fin(i,v) for(ll i=0;i<v.size();i++)
#define go(x,y) for(int i=x;i<=y;i++)
#define MOD 1e9+7
#define out(x) cout << x << endl
#define mii map<int,int>
#define mid map<int,double>
#define loop(mp) for(auto i=mp.begin();i!=mp.end();i++)
#define mm(arr) memset(arr, 0, sizeof(arr))
#define mp(x,y) make_pair(x,y)

#define two2n(n) (1<<n)
constexpr auto PI = 3.14159265358979323846;;



bool ispow(unsigned long long x)
{
	return (x != 0) && ((x & (x - 1)) == 0);
}


bool how(pair<int, int>& a, pair<int, int>& b)
{
	return ((a.second > b.second));//|| (a.second == b.second && a.first < b.first));
}


/*
		auto start = high_resolution_clock::now();
		auto stop = high_resolution_clock::now();
		auto duration = duration_cast<microseconds>(stop - start);
		cout << "time needed is : " << fixed << setprecision(8) << duration.count() << "   microseconds" << endl;

*/


bool isprime(ll n)
{
	if (n <= 1)
		return false;


	for (int i = 2; i <= sqrt(n); i++)
		if (n % i == 0)
			return false;

	return true;
}

void primeinrange(ll n)
{
	vll v(n, 1);
	v[0] = 0;
	v[1] = 0;

	ll i = 2;
	ll k = 0;
	while (i * i <= n)
	{
		if (v[i] == 0)
		{
			i++;
			continue;
		}
		ll j = 2 * i;
		while (j < n)
		{
			v[j] = 0;
			j += i;
		}
		i++;
	}

	for (int i = 1; i < n; i++)
		if (v[i] == 1)
			k++;
	cout << k << endl;
	for (int i = 1; i < n; i++)
		if (v[i] == 1)
			cout << i << " ";


}


int main()
{
	/*
	   freopen("input.txt", "r", stdin);
	   freopen("output.txt", "w", stdout);
   */
	fst;

	int t;
	cin >> t;
	while (t--)
	{


		int n, k;
		cin >> n >> k;
		vi v(n);
		int all = 0;
		vll sum(n + 1, 0);
		for (int i = 0; i < n; i++)
		{
			cin >> v[i];
			all += v[i];
			sum[i + 1] = sum[i] + v[i];
		}

		ll mx = 0, j, cur = 0;
		map<int, int>s;
		if (k == 1)
			cout << all << endl;
		else
		{


			for (int i = 0; i <= n; i++)
			{
				/*
				 j = i + 1;
				 if (j+i > n)
					 break;
				while ((i ^ j) != k)
				{
					j++;
					if (j +i > n)
						break;
				}
				if (j +i> n)
					continue;
					*/
				if (s.find(i ^ k) != s.end())
				{
					j = i ^ k;
					cur = all;
					cur = all - sum[n - j] + sum[i];
					ll other = all - sum[n - i] + sum[j];
					mx = max(mx, max(cur, other));
				}
				s[i] = i ^ k;
			}

			cout << mx << endl;
		}

	}






	return 0;
}
Copy
Midterms M_kmail
GNU G++17
35 ms
312 KB
Wrong Answer