#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll solve(int i, vector<int>& arr, int k, int goalxor, vector<unordered_map<ll, ll>>& g) {
int n = arr.size();
if (i == k) {
if (goalxor == 0)
return 0;
return 1e9;
}
int total = (1+(n-i-1)/k);
ll minCost = 1e9;
for (int lastElement = 0; lastElement <= 63; lastElement++) {
int oldxor = goalxor ^ lastElement;
// If g[i][lastElement] doesn't exist, it defaults to 0
minCost = min(minCost, solve(i + 1, arr, k, oldxor, g) + (total - (g[i].count(lastElement) ? g[i][lastElement] : 0)));
}
return minCost;
}
int main() {
// Initialize the array and k
vector<int> arr1{1, 2, 3, 4};
int k = 3; // Define k
// Create the unordered_map vector
vector<unordered_map<ll, ll>> g(k); // Ensure the vector has size k
// Populate the groups
for (int i = 0; i < arr1.size(); i++) {
int groupIndex = i % k;
g[groupIndex][arr1[i]]++; // Grouping the elements
}
int goalxor = 0; // Initialize the goal XOR
cout << solve(0, arr1, k, goalxor, g) << endl; // Call solve function and output result
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKbGwgc29sdmUoaW50IGksIHZlY3RvcjxpbnQ+JiBhcnIsIGludCBrLCBpbnQgZ29hbHhvciwgdmVjdG9yPHVub3JkZXJlZF9tYXA8bGwsIGxsPj4mIGcpIHsKICAgIGludCBuID0gYXJyLnNpemUoKTsKICAgIGlmIChpID09IGspIHsKICAgICAgICBpZiAoZ29hbHhvciA9PSAwKQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICByZXR1cm4gMWU5OwogICAgfQoKICAgIGludCB0b3RhbCA9ICgxKyhuLWktMSkvayk7CiAgICBsbCBtaW5Db3N0ID0gMWU5OwogICAgZm9yIChpbnQgbGFzdEVsZW1lbnQgPSAwOyBsYXN0RWxlbWVudCA8PSA2MzsgbGFzdEVsZW1lbnQrKykgewogICAgICAgIGludCBvbGR4b3IgPSBnb2FseG9yIF4gbGFzdEVsZW1lbnQ7CiAgICAgICAgLy8gSWYgZ1tpXVtsYXN0RWxlbWVudF0gZG9lc24ndCBleGlzdCwgaXQgZGVmYXVsdHMgdG8gMAogICAgICAgIG1pbkNvc3QgPSBtaW4obWluQ29zdCwgc29sdmUoaSArIDEsIGFyciwgaywgb2xkeG9yLCBnKSArICh0b3RhbCAtIChnW2ldLmNvdW50KGxhc3RFbGVtZW50KSA/IGdbaV1bbGFzdEVsZW1lbnRdIDogMCkpKTsKICAgIH0KICAgIHJldHVybiBtaW5Db3N0Owp9CgppbnQgbWFpbigpIHsKICAgIC8vIEluaXRpYWxpemUgdGhlIGFycmF5IGFuZCBrCiAgICB2ZWN0b3I8aW50PiBhcnIxezEsIDIsIDMsIDR9OwogICAgaW50IGsgPSAzOyAvLyBEZWZpbmUgawoKICAgIC8vIENyZWF0ZSB0aGUgdW5vcmRlcmVkX21hcCB2ZWN0b3IKICAgIHZlY3Rvcjx1bm9yZGVyZWRfbWFwPGxsLCBsbD4+IGcoayk7IC8vIEVuc3VyZSB0aGUgdmVjdG9yIGhhcyBzaXplIGsKCiAgICAvLyBQb3B1bGF0ZSB0aGUgZ3JvdXBzCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycjEuc2l6ZSgpOyBpKyspIHsKICAgICAgICBpbnQgZ3JvdXBJbmRleCA9IGkgJSBrOwogICAgICAgIGdbZ3JvdXBJbmRleF1bYXJyMVtpXV0rKzsgLy8gR3JvdXBpbmcgdGhlIGVsZW1lbnRzCiAgICB9CgogICAgaW50IGdvYWx4b3IgPSAwOyAvLyBJbml0aWFsaXplIHRoZSBnb2FsIFhPUgogICAgY291dCA8PCBzb2x2ZSgwLCBhcnIxLCBrLCBnb2FseG9yLCBnKSA8PCBlbmRsOyAvLyBDYWxsIHNvbHZlIGZ1bmN0aW9uIGFuZCBvdXRwdXQgcmVzdWx0CiAgICByZXR1cm4gMDsKfQ==