Trong bài toán này, chúng ta được cho một chuỗi nhị phân. Nhiệm vụ là đếm tổng số cách xóa một phần tử sao cho XOR thành 0.
Hãy xem ví dụ để hiểu bài toán,
Đầu vào
n = 11010
Đầu ra
3
Để giải bài toán này, chúng ta cần logic: nếu số lượng 1 là chẵn thì XOR của chuỗi sẽ là 0, ngược lại, cần xóa một 1 khỏi chuỗi. Chúng ta có thể xóa bất kỳ số lượng 0 nào mà không ảnh hưởng XOR.
Chương trình triển khai giải pháp,
Ví dụ
#include<iostream> #include<string.h> using namespace std; int wayXorZero(string binaryString){ int oneCount = 0, zeroCount = 0; int n = binaryString.length(); for (int i = 0; i < n; i++) if (binaryString[i] == '1') oneCount++; else zeroCount++; if (oneCount % 2 == 0) return zeroCount; return oneCount; } int main(){ string binaryString = "10110100"; cout<<"Số cách làm XOR thành 0 là "<<wayXorZero(binaryString); return 0; }Đầu ra
Số cách làm XOR thành 0 là 4