1. 程式人生 > >Little Girl and Maximum XOR(區間最大異或值--技巧)-------------C語言——菜鳥級

Little Girl and Maximum XOR(區間最大異或值--技巧)-------------C語言——菜鳥級

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 %I64d specifier.
Output
In a single line print a single integer — the maximum value of for all pairs of integers a, b (l ≤ a ≤ b ≤ r).
Example
Input
1 2
Output
3
Input
8 16
Output
31
Input
1 1
Output
0

【題解】
首先,異或值要為1,那麼兩個數的對應二進位制位要不同,而異或值要最大,則二進位制的高位要儘可能的為1,所以這就是切入點,從給定的區間上下限入手(l和R),從l和r二進位制的最高位開始比較,如果出現對應位異或值位1,就從該處開始,低位都置為1,此時其表示的數就是最大異或值了。

#include<stdio.h>
int  main()
 {
 long long l,r,t,w;
 while(scanf("%lld%lld",&l,&r)!=EOF)
 {  
   if(r==l)printf("0\n");
   else
   {w=0;
       while
(r!=l&&r!=0)//相等或最大值為0 結束 101011 { //相等則證明 此位之前的異或不可能為1 101110 w++; l=l>>1;//從右向左移動 r=r>>1; } t=1; while(w--)t=t*2; printf("%lld\n",t-1); } } return 0; }

相關推薦

Little Girl and Maximum XOR(區間--技巧)-------------C語言——

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 consid

[01字典樹]求序列完美度(求區間)

函數表 字典 style targe efi cnblogs main code blank https://nanti.jisuanke.com/t/15531 解題關鍵:01字典樹模板,用字典樹保存每個數的二進制表示,從而動態維護區間上的最大異或值,註意添加和刪除都可

Little Girl and Maximum XOR CodeForces - 276D

please exists ati present streams sid pri clas str A little girl loves problems on bitwise operations very much. Here‘s one of them. You

Codeforces 276D. Little Girl and Maximum XOR

D. Little Girl and Maximum XOR time limit per test 2 seconds memory limit per test 256

CF276D Little Girl and Maximum XOR(思路題)

不知道該說些什麼。。。 #include <cstdio> #include <cstring> #include <algorithm> #include &

The xor-longest Path(字典樹—求樹上連續區間

The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10003 Accepted: 2029 Description In an

利用01字典樹查詢

void max ret ++ 使用 str spa hdu sizeof 01字典樹的是只含有0和1兩種字符的字典樹,在使用它的時候,把若幹數字轉成二進制後插入其中 在查詢樹中的哪個數字和給定數字有最大異或值的時候,從根開始貪心查詢就ok了 HDU4825是一道裸題:給出

Leetcode 421.陣列中兩數的

陣列中兩數的最大異或值 給定一個非空陣列,陣列中元素為 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。 找到 ai 和aj 最大的異或 (XOR) 運算結果,其中0 ≤ i,j < n。 你能在O(n)的時間解決這個問題嗎? 示例:

421.陣列中兩個數的

給定一個非空陣列,陣列中元素為 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。 找到 ai 和aj 最大的異或 (XOR) 運算結果,其中0 ≤ i,  j < n 。 你能在O(n)的時間解決這個問題嗎? 示例: 輸入: [

Codeforces 276C Little Girl and Maximum Sum(線段樹的區間更新)

The little girl loves the problems on array queries very much. One day she came across a rather well-known problem: you've got an array

Little Girl and Maximum Sum

#include <iostream> #include <algorithm> using namespace std; long long a[200010],t[200010],ans; int l,r,n,q; int main() {

【bzoj21115 [Wc2011] Xor 帶全無向圖中1道n經過路徑權和(含有環)】

這道題要求從1到n的最大xor和路徑,存在重邊,允許經過重複點、重複邊。 第一行包含兩個整數N和 M, 表示該無向圖中點的數目與邊的數目。 接下來M 行描述 M 條邊,每行三個整數Si,Ti ,Di,表示 Si 與Ti之間存在 一條權值為 Di的無向邊。 圖中可能有重邊或自環。 輸出:僅包含

POJ 3764 The xor-longest Path 字典樹求

題意,一顆樹,每個邊有個值,在樹上找一條簡單路徑,使得這條路徑上的邊權異或值最大 把這題模型轉換一下, 對於任意一條路徑的異或,表示為f(u, v) 則f(u, v) = f(1, u) ^ f(1, v) 這是顯然的 其中f(1, i)是可以再O(n)內處理出來 然

【bzoj3261】

異或 ... urn fin pri bit names -- else 就是一個可持久化Trie....... #include<bits/stdc++.h> #define N 600005 using namespace std; inline int

【bzoj3281】和 可持久化Trie樹

log pac 序列 str char s pan pri scan bool 題目描述 給定一個非負整數序列 {a},初始長度為 N。 有M個操作,有以下兩種操作類型:1、A x:添加操作,表示在序列末尾添加一個數 x,序列的長度 N+1。2、Q l r x

51nod1312

out opcode 輸出 () 不一定 stream 操作 ref output 題目來源: TopCoder 基準時間限制:1 秒 空間限制:131072 KB 分值: 320 有一個正整數數組S,S中有N個元素,這些元素分別是S[0],

LibreOJ #113.

getch logs target true main getchar () char pan 二次聯通門 : LibreOJ #113. 最大異或和 /* LibreOJ #113. 最大異或和 線性基 插入 與

51nod 1312 和(線性基)

ans cst image 就是 xor return ++ amp nbsp 線性gay - - 分析:要求和盡量大,首先可以想到,求完線性基後,記最大異或為Max,對於線性基以外的數,都可以變成Max,剩下的線性無關,變成最小線性基,可以通過異或基中最大的數把所有的

BZOJ3261:和——題解

cstring std IT digi problem ios names delta font http://www.lydsy.com/JudgeOnline/problem.php?id=3261 給定一個非負整數序列{a},初始長度為N。 有M個操作,有

bzoj3261: 和 可持久化字典樹模板

roo CP 前綴和 sum oot 可持久化 可持久化字典樹 == tdi 可持久化字典樹不過記得是兩次前綴和,所以記得減2,還有p=1的情況。 #include<bits/stdc++.h> using namespace std; int l[18000