XORing чисел в заданном диапазоне - PullRequest
0 голосов
/ 23 января 2019

Здесь, в этой программе XORing чисел в заданном диапазоне, я не могу понять алгоритм того, как они находят xor чисел. Было бы неплохо, если бы кто-то объяснил, как этот алгоритм работает при поиске значений xor в диапазоне

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*This program is used to find the xor of numbers within the range

u can enter multiple inputs.Here first enter the numbers of inputs u want to enter then in the next line enter the starting and ending range of the xoring 
numbers with space

for example : 

Input :
1
2 3

output:

odd


output displays whether the xor value  within the given range is odd r not

*/

class XORNEY {
    public static void main(String[] args) throws IOException {
        BufferedReader kb = new BufferedReader(new InputStreamReader(System.in));
        int testCases = Integer.parseInt(kb.readLine());
        StringBuilder output = new StringBuilder();

        while (testCases-- > 0) {
            //here without declaring the array dynamically how they are storing all the inputs
            String[] input = kb.readLine().trim().split(" ");  

            long L = Long.parseLong(input[0]);
            long H = Long.parseLong(input[1]);
            //i am more confused here abt why they are doing this
            long count = (H - L) / 2;   
            if ((L & 1) == 1 || (H & 1) == 1) count++;
            output.append((count & 1) == 1 ? "Odd\n" : "Even\n");
        }

        System.out.print(output);
    }
}

1 Ответ

0 голосов
/ 23 января 2019

здесь без объявления динамически массива, как они хранятся все входы

Они просто хранят каждую строку тестового примера, а не все входы. Каждая строка состоит из двух чисел, разделенных пробелом, если вы разделите ее на пробел, вы получите оба числа в массиве.

Я больше запутался здесь, почему они делают это

Я могу дать несколько идей -

В диапазоне чисел вы получите двоичные числа, заканчивающиеся чередованием последовательности 0 и 1. Например -

  • 10 -> ***** 0
  • 11 -> ***** 1
  • 12 -> ***** 0
  • 13 -> ***** 1

для каждой пары 0, 1 XOR будет равно 1. Теперь вам нужно выяснить, получаете ли вы четное количество пар или нечетное количество пар. Четное число пар приведет к четному числу от 1 до XOR и даст вам значение, заканчивающееся на 0, что означает, что конечное значение XOR является числом even. И odd наоборот.

Если у вас есть четное количество элементов в диапазоне, вы вполне уверены, что у вас есть несколько пар (0, 1). Но если это странно, в зависимости от того, является ли дополнительный элемент 0/1, ваш расчет необходимо скорректировать.

...