문제 설명
n개의 요소로 구성된 배열이 제공됩니다. 작업은 전체 배열의 XOR을 0으로 만드는 것입니다. 이를 달성하기 위해 다음을 수행할 수 있습니다.
요소 중 하나를 선택할 수 있습니다 -
- 요소를 선택한 후 1씩 증가 또는 감소할 수 있습니다.
- 전체 배열의 XOR 합을 0으로 만들기 위해 선택한 요소에 필요한 최소 증가/감소 연산 수를 찾아야 합니다.
예시
arr[] ={2, 4, 7}이면 1개의 연산이 필요합니다 -
- 요소 2 선택
- 1씩 감소
- 이제 배열은 {3, 4, 7}이 되고 XOR은 0입니다.
알고리즘
- 전체 배열의 XOR 찾기
- 이제 요소를 선택했다고 가정합니다. 따라서 해당 요소에 필요한 비용은 절대(arr[i]-(XORsum^arr[i]))입니다.
- 각 요소에 대한 이러한 절대값의 최소값을 계산하는 것이 최소 요구 작업입니다.
예시
#include <iostream>
#include <climits>
#include <cmath>
using namespace std;
void getMinCost(int *arr, int n) {
int operations = INT_MAX;
int elem;
int xorValue = 0;
for (int i = 0; i < n; ++i) {
xorValue = xorValue ^ arr[i];
}
for (int i = 0; i < n; ++i) {
if (operations > abs((xorValue ^ arr[i]) - arr[i])) {
operations = abs((xorValue ^ arr[i]) - arr[i]);
elem = arr[i];
}
}
cout << "Element= " << elem << endl;
cout << "Minimum required operations = " << abs(operations) << endl;
}
int main() {
int arr[] = {2, 4, 7};
int n = sizeof(arr) / sizeof(arr[0]);
getMinCost(arr, n);
return 0;
} 출력
위의 프로그램을 컴파일하고 실행할 때. 다음 출력을 생성합니다.
Element = 2 Minimum required operations = 1