2016-10-22 3 views
-1

Этот вопрос задан в acm-icpc в 2009 году. У меня есть решение в java, но почему я получаю неправильный ответ. Пожалуйста, помогите мне узнать об ошибке. Является ли конструкция trie прекрасной, и найти максимум с trie является правильным. я пытаюсь это первый разМаксимальный XOR-Subarray

Проблема 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; 
    } 
    } 
+0

Вы должны включать краткое изложение проблемы, а не просто ссылку на внешний ресурс. Кроме того, правильное форматирование облегчает чтение другим пользователям другим пользователям. – beatngu13

ответ

0

Редактировать линейный выход.

System.out.println(res); 

или

System.out.print(res+"\n"); 
Смежные вопросы