समस्या विवरण
N×M 2D सरणी दी गई है। जांचें कि क्या प्रत्येक पंक्ति से एक संख्या चुन सकते हैं जिससे उनका XOR शून्येतर (non-zero) हो।
उदाहरण मैट्रिक्स: 7 7 7 10 10 7 पहले कॉलम का XOR: 7⊕10=13 ≠ 0 → संभव
सरल समाधान
- पहले कॉलम के सभी तत्वों का XOR लें
- यदि ≠ 0 → संभव है
- यदि = 0, तो जांचें कि क्या किसी पंक्ति में कम से कम दो अलग-अलग मान हैं
- यदि हां → संभव है (उस पंक्ति में अलग मान चुनकर XOR बदल सकते हैं)
- अन्यथा → असंभव
उदाहरण कोड
#include <iostream>
#define N 2
#define M 3
using namespace std;
bool isXORnonZero(int matrix[N][M]) {
int xorValue = 0;
for (int i = 0; i < N; i++)
xorValue ^= matrix[i][0];
if (xorValue != 0) return true;
for (int i = 0; i < N; i++)
for (int j = 1; j < M; j++)
if (matrix[i][j] != matrix[i][0])
return true;
return false;
}
int main() {
int mat[N][M] = {{7, 7, 7}, {10, 10, 7}};
if (isXORnonZero(mat))
cout << "XOR has non-zero value";
else
cout << "XOR has zero value";
return 0;
}
आउटपुट
XOR has non-zero value