题目链接 点击打开链接
题目1380:lucky number用map容易超内存,用一般的方法容易超时,利用二进制计算每位数量,然后利用关系式 m%n!=0 可以得到,满足关系式的位数保存,换成十进制数即为最终的lucky number ,但用java实现时,还得注意 输入,否则也超时
代码如下:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
Scanner cin = new Scanner(new InputStreamReader(System.in));
StreamTokenizer stcin = new StreamTokenizer(System.in) ;
PrintWriter cout = new PrintWriter(System.out) ;
while(stcin.nextToken() != StreamTokenizer.TT_EOF){
new Task().solve(stcin , cout) ;
}
cout.flush();
cout.close();
}
}
class Task{
int n , m ;
static int[] bit = new int[32] ;
static{
bit[0] = 1 ;
for(int i =1 ; i <= 31 ; i++) bit[i] = bit[i-1]<< 1 ;
}
void solve(StreamTokenizer cin , PrintWriter cout)throws IOException {
n = (int)cin.nval ;
cin.nextToken() ;
m = (int)cin.nval ;
int [] bitSize = new int[32] ;
Arrays.fill(bitSize, 0);
for(int i =1 ; i<= m ; i++){
cin.nextToken() ;
int x = (int)cin.nval ;
for(int j = 0 ; j<= 31 ; j++){
bitSize[j] += (x & bit[j]) > 0 ? 1 : 0 ;
}
}
int ans = 0 ;
for(int i= 0 ; i<= 31 ; i++){
bitSize[i] %= n ;
if(bitSize[i] > 0)
ans += bit[i] ;
}
cout.println(ans);
//cout.flush();
}
}