2016-09-08 20 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當我通過拉赫大小的二進制串(〜500),其工作更小的長度字符串精絕。NumberFormatException的同時,從二進制字符串轉換

+0

只是猜測:你讀下一個int,但數字可能會更大。 –

+3

請編輯您的問題以包含例外的實際文本,包括堆棧跟蹤。指出您發佈的代碼中的哪一行觸發了異常。 – Kenster

+1

請查看[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve),然後查看您的帖子。 –

回答

1

Java long值是一個64位數字,也就是說,您可以在其中存儲多達64位。具有500位的字符串不能用單個long來表示,因此是例外。

BitSet可以表示任意長度的位組。不幸的是,BitSet沒有將一個BitSet追加到另一個的方法。因此,我所要做的就是通過char來檢查String char,並根據需要設置或清除BitSet的第n位。

0

無法創建具有500位的int。最大值是64.在Java中,您可以使用BigInteger,它是一個用於大數字的類。

它有一個構造函數,它需要一個String和一個構造函數,其值爲Stringint基數。

BigInteger a = new BigInteger("123456789"); 
BigInteger b = new BigInteger("10000000000000000", 2); 
相關問題