【问题标题】:Maximum XOR-Subarray最大异或子阵列
【发布时间】:2016-10-22 21:21:02
【问题描述】:

这个问题是 2009 年在 acm-icpc 中提出的。 我在java中有解决方案,但为什么我得到错误的答案。请帮助我找出错误。 trie 构造是否很好,用 trie 找到最大值是正确的。 我是第一次尝试

问题Link

import java.io.*;
import java.util.*;
public class Main{
public static void main(String []args){
    Scanner sc=new Scanner(System.in);
    //System.out.print((4&(1L<<3)));
    int tes=sc.nextInt();
    while(tes-->0){
        int size=sc.nextInt();
    long arr[]=new long[size];
    for(int i=0;i<size;i++){
        arr[i]=sc.nextLong();
    }
    long pre=0;
    long res=0;
    Trie t=new Trie();
    t.insert(0);
    for(int i=0;i<size;i++){
        pre=pre^arr[i];
        //System.out.println(Integer.toBinaryString(pre));
        t.insert(pre);
        long y=t.query(pre);
        y=y^pre;
        if(y>res){
            res=y;
        }
    }
    System.out.print(res);}

    }
 }
 class TrieNode{
 long val;
 TrieNode left;
 TrieNode right;
  TrieNode(){

 }
 TrieNode(int i){
     this.val=i;
 }
 }
 class Trie{
 private final TrieNode root;
 Trie(){
    root=new TrieNode();
    root.val=-1;
 }
  void insert(long num){
     TrieNode t=root;
    for(int i=63;i>=0;i--){
        if(((num>>i)&1)!=0){
            if(t.right==null){
                TrieNode temp=new TrieNode();
                t.right=temp;
            }
            t=t.right;
        }
        else{
            if(t.left==null){
                TrieNode temp=new TrieNode();
                t.left=temp;
            }
            t=t.left;
        }
        t.val=num;
    }

}
long query(long num){
    int i=0;
    TrieNode t=root;
    for(i=63;i>=0;i--){
        if(((num>>i)&1)==0){
            if(t.right!=null){
                t=t.right;
            }
            else t=t.left;
        }
        else{
            if(t.left!=null){
                t=t.left;
            }
            else t=t.right;
        }
    }
    return t.val;
   }
  }

【问题讨论】:

  • 您应该包含问题的摘要,而不仅仅是指向外部资源的链接。此外,正确的格式可以让其他用户更容易阅读您的代码。

标签: java xor trie


【解决方案1】:

编辑输出行。

System.out.println(res);

System.out.print(res+"\n");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多