文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

Binary Search [ AIZU ONLINE JUDGE ALDS1_4_B ]

judge.u-aizu.ac.jp


数列 S と数列 T が与えられます。
数列 T のそれぞれの要素のうち、数列 S に含まれているものの個数を求める問題です。


ごく普通の二分探索の問題です。本来であれば自作の二分探索関数を書いて解くべきなのでしょうけれど、ここは遠慮なく Arrays.binarySearch を使ってしまいます。


void solve () {

	int n = nextInt();
	int[] A = nextIntArray(n);

	int m = nextInt();
	int ans = 0;
	for (int i=0; i<m; i++) {
		if (Arrays.binarySearch(A, nextInt()) >= 0) ans++;
	}

	out.println(ans);

}


通常の Arrays.binarySearch は、存在しない値を探索した際に負の値が返ってくるので、0以上の値が返ってきたなら値が存在するということになります。よって、数列 T のそれぞれの要素を Arrays.binarySearch で数列 S に探索して、0以上の値が返ってきた回数を数えます。