1. 程式人生 > >Codeforces 276D. Little Girl and Maximum XOR

Codeforces 276D. Little Girl and Maximum XOR

D. Little Girl and Maximum XOR time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output

A little girl loves problems on bitwise operations very much. Here's one of them.

You are given two integers l and r. Let's consider the values of  for all pairs of integers a and b (l ≤ a ≤ b ≤ r). Your task is to find the maximum value among all considered ones.

Expression  means applying bitwise excluding or operation to integers x

 and y. The given operation exists in all modern programming languages, for example, in languages C++ and Java it is represented as "^", in Pascal — as «xor».

Input

The single line contains space-separated integers l and r (1 ≤ l ≤ r ≤ 1018).

Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin

cout streams or the %I64dspecifier.

Output

In a single line print a single integer — the maximum value of  for all pairs of integers ab (l ≤ a ≤ b ≤ r).

Sample test(s) input
1 2
output
3
input
8 16
output
31
input
1 1
output
0
#include <stdio.h>

int main()
{
	unsigned long long l, r;
	unsigned long long finger = (unsigned long long)1 << 63;
	scanf("%I64u%I64u", &l, &r);
	if(l == r)
		finger = 0;
	else {
		while(!((l&finger) ^ (r&finger)))
			finger >>= 1;
		finger = (finger << 1) - 1;
	}
	printf("%I64u\n", finger);
	return 0;
}
我漏了第6行的強制型別轉換,後來發現了這個錯誤。