Maximizing XOR 這麼順利地解決。。。

Problem Statement

給定兩個整數:L 和 R

∀ L ≤ A ≤ B ≤ R, 找出 A xor B 的最大值。

輸入格式

第一行爲 L 
第二行爲 R

數據範圍

1 ≤ L ≤ R ≤ 103

輸出格式

輸出最大的異或和

樣例輸入

1
10

樣例輸出

15

樣例解釋

當B = 10, A = 5時,異或和最大。
1010 xor 0101 = 1111,所以答案是 15.


import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {
/*
 * Complete the function below.
 */
 static int getFirst(int num){
     int i=0;
     for(i=0;i<11;i++){
            if((int)Math.pow(2,i)>num){
                break;   
            }                         
        }
     return i;
 }
    static int maxXor(int l, int r) {
        int t=getFirst(r);
        int temp=(int)Math.pow(2,t);
        if(getFirst(l)==getFirst(r))
            return maxXor(l-temp/2,r-temp/2);
        else           
            if((l<=temp-1-r)||(l^(temp-1))<=r)
            return temp-1;
            return 0;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int res;
        int _l;
        _l = Integer.parseInt(in.nextLine());
        
        int _r;
        _r = Integer.parseInt(in.nextLine());
        
        res = maxXor(_l, _r);
        System.out.println(res);
        
    }
}


發佈了87 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章