Hatena::Grouptopcoder

TopCoder戦記

研究開発者・ellerのTopCoder挑戦記録。言語は主にJavaを使用しています。ドキュメンテーションコメントはSubmit完了後、ブログ掲載前に補完したものです。

2009-10-03SRM426 DIV2

SRM426 DIV2 Level One(250pt.)

| 00:27

http://www.topcoder.com/stat?c=problem_statement&pm=10146&rd=13517

『N人が参加するトーナメントで、あなたがライバルと対戦するのは何回戦めか求めよ。』

引数が0ではなく1から始まっていることに注意すれば良い。0はじまりに変換して考えれば、対戦する相手の番号は自分の番号と下位1ビット以外が同じと考えられる。両者の番号が同じになるまで2で割り続け、割った回数を数えればOK。

// 235.49 pt.

public class KnockoutTourney {
	public int meetRival(int N, int you, int rival) {
		int count = 0;
		--you;
		--rival;
		do {
			++count;
			you >>>= 1;
			rival >>>= 1;
		} while (you != rival);
		return count;
	}
}