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);
}
}
当我传递大小的二进制字符串(~500)时,我的fromString
正在给我NumberFormatException
,它对于较小长度的字符串工作得非常好。
答案 0 :(得分:1)
Java long值是64位数,即最多可以存储64位。具有500位的字符串根本不能用单个long表示,因此是例外。
BitSet可以表示任意长度的位组。不幸的是,BitSet没有将一个BitSet附加到另一个BitSet的方法。因此,我要做的是通过char查询String char,并根据需要设置或清除BitSet的第n位。
答案 1 :(得分:0)
没有办法用500位创建int
。最大值为64.在Java中,您可以使用BigInteger,这是一个用于大数字的类。
它有一个构造函数,它接受String
和构造函数,该构造函数取String
个值和int
基数。
BigInteger a = new BigInteger("1234567890123456");
BigInteger b = new BigInteger("10000000000000000", 2);