2016-09-08 3 views
0
public class ACM_ICPC_TEAM { 
public static void main(String[] args) { 

     Scanner sc=new Scanner(System.in); 
     int N=sc.nextInt(); 
     int M=sc.nextInt(); 
     sc.nextLine(); 

     String s[]=new String[N]; 
     for(int i=0;i<N;i++) 
     { 
     for(int j=0;j<M;j++); 
     {    
      s[i]=sc.nextLine().toString();    
     }   
     } 
     BitSet b1=new BitSet(M); 
     BitSet b2=new BitSet(M); 
     BitSet b3=new BitSet(M); 
     int max=0,count=0,count1=0; 
     for(int i=0;i<N;i++) 
     { b1=fromString(s[i]); 
     for(int j=i+1;j<N;j++) 
     { 
      b3=(BitSet) b1.clone(); 
      b2=fromString(s[j]); 
      b3.or(b2);  
      count=b3.cardinality();  
      if(count>max) 
       { 
       max=count; 
       count1=1; 
       } 
      else if(count==max) 
       count1++; 
     } 
     } 

     System.out.println(count+"\n"+count1);   
    } 

public static BitSet fromString(String s) 
{ 
    return BitSet.valueOf(new long[] { Long.parseLong(s,2) }); 
} 
public static String toString(BitSet b) 
{ 
return Long.toString(b.toLongArray()[0], 2); 
} 
} 

fromString Мой дает мне NumberFormatException, когда я прохожу двоичную строку Lage размера (~ 500), его работы абсолютно нормально для небольших строк длины.NumberFormatException при преобразовании из двоичной строки

+0

Просто догадка: вы читаете следующий int, но число может быть больше. –

+3

Измените свой вопрос, чтобы включить фактический текст исключения, включая трассировку стека. Укажите, какая строка кода, который вы отправили, вызывает исключение. – Kenster

+1

Пожалуйста, ознакомьтесь с [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и просмотрите сообщение. –

ответ

1

Длительное значение Java - это 64-разрядное число, то есть вы можете хранить до 64 бит в нем. Строка с 500 битами просто не может быть представлена ​​одним длинным, таким образом, исключением.

BitSet может представлять наборы бит произвольной длины. К сожалению, у BitSet нет метода добавления одного BitSet к другому. Поэтому, что бы я сделал, это пройти через символ String char и установить или очистить n-й бит BitSet, если это необходимо.

0

Невозможно создать int с 500 бит. Максимум 64. На Java вы можете использовать BigInteger, который является классом, который используется для огромных чисел.

У этого есть конструктор, который принимает String и конструктор, который принимает значение String и int radix.

BigInteger a = new BigInteger("123456789"); 
BigInteger b = new BigInteger("10000000000000000", 2); 
Смежные вопросы