結果
| 問題 |
No.206 数の積集合を求めるクエリ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-06-08 15:51:14 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 1,414 ms / 7,000 ms |
| コード長 | 3,159 bytes |
| コンパイル時間 | 2,804 ms |
| コンパイル使用メモリ | 78,092 KB |
| 実行使用メモリ | 49,060 KB |
| 最終ジャッジ日時 | 2024-07-06 14:47:50 |
| 合計ジャッジ時間 | 13,112 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.InputMismatchException;
public class Main_yukicoder206 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Printer pr = new Printer(System.out);
int l = sc.nextInt();
int m = sc.nextInt();
int n = sc.nextInt();
long[] a = new long[(2 * n + 63) / 64];
long[] b = new long[(2 * n + 63) / 64];
for (int i = 0; i < l; i++) {
setBit(a, sc.nextInt() - 1);
}
for (int i = 0; i < m; i++) {
setBit(b, sc.nextInt() - 1);
}
int q = sc.nextInt();
for (int i = 0; i < q; i++) {
pr.println(countBit(a, b));
shiftBit(b);
}
pr.close();
sc.close();
}
private static void shiftBit(long[] b) {
boolean carry = false;
for (int i = 0; i < b.length; i++) {
boolean tmp = (b[i] & 0x8000000000000000L) != 0;
b[i] <<= 1;
if (carry) {
b[i] |= 0x1L;
}
carry = tmp;
}
}
private static int countBit(long[] a, long[] b) {
int ret = 0;
for (int i = 0; i < a.length; i++) {
long tmp = a[i] & b[i];
ret += Long.bitCount(tmp);
}
return ret;
}
private static void setBit(long[] a, int i) {
int n = i / 64;
long mask = 0x1L << (i % 64);
a[n] |= mask;
}
@SuppressWarnings("unused")
private static class Scanner {
BufferedReader br;
StreamTokenizer st;
Scanner (InputStream in) {
br = new BufferedReader(new InputStreamReader(in));
st = new StreamTokenizer(br);
}
String next() throws RuntimeException {
try {
if (st.nextToken() != StreamTokenizer.TT_WORD) {
throw new InputMismatchException();
}
return st.sval;
} catch (IOException e) {
throw new IllegalStateException();
}
}
int nextInt() throws RuntimeException {
try {
if (st.nextToken() != StreamTokenizer.TT_NUMBER) {
throw new InputMismatchException();
}
return (int)st.nval;
} catch (IOException e) {
throw new IllegalStateException();
}
}
long nextLong() throws RuntimeException {
try {
if (st.nextToken() != StreamTokenizer.TT_NUMBER) {
throw new InputMismatchException();
}
return (long)st.nval;
} catch (IOException e) {
throw new IllegalStateException();
}
}
float nextFloat() throws RuntimeException {
try {
if (st.nextToken() != StreamTokenizer.TT_NUMBER) {
throw new InputMismatchException();
}
return (float)st.nval;
} catch (IOException e) {
throw new IllegalStateException();
}
}
double nextDouble() throws RuntimeException {
try {
if (st.nextToken() != StreamTokenizer.TT_NUMBER) {
throw new InputMismatchException();
}
return st.nval;
} catch (IOException e) {
throw new IllegalStateException();
}
}
void close() {
try {
br.close();
} catch (IOException e) {
// throw new IllegalStateException();
}
}
}
private static class Printer extends PrintWriter {
Printer(PrintStream out) {
super(out);
}
}
}