私はWebを見回していて、このGoogle Code Jamパズルを見つけました。本当に気に入ったので、ここに投稿することにしました。
新しい宝くじゲーム
宝くじが変わります!宝くじには、ランダムな当選番号を生成するマシンがありました。しかし、不正行為の問題により、宝くじは別のマシンを追加することを決定しました。新しい当選番号は、2つのマシンによって生成された2つの乱数間のビットごとのAND演算の結果です。
XとYのビットANDを見つけるには、両方をバイナリで記述します。その結果、バイナリの結果のビットは、XとYの対応するビットが両方とも1の場合は1になり、それ以外の場合は0になります。ほとんどのプログラミング言語では、の-ANDビット単位のXとYが書かれているX&Yを。
例:古いマシンは7 = 0111を生成します。新しいマシンは11 = 1011を生成します。当選番号は(7 AND 11)=(0111 AND 1011)= 0011 = 3になります。
この措置により、宝くじは不正請求のケースを減らすことを期待していますが、残念ながら宝くじ会社の従業員は次の情報を漏らしました:古いマシンは常にA未満の負でない整数を生成し、新しいマシンは常に生成しますBより小さい負でない整数。
カタリナはこの宝くじに当たって、それを試すために、K未満のすべての負でない整数を購入することにしました。
A、B、およびKが与えられた場合、カタリナは、マシンが彼女を勝者とする数値のペアを生成できるさまざまな方法で知りたいと考えています。
彼女を助けてくれませんか?
入力入力の最初の行は、テストケースの数を示します。T行が続き、各行には3つの数値AB Kが付いています。
出力各テストケースについて、「Case #x:y」を含む1行を出力します。xはテストケース番号(1から開始)であり、yはマシンがCatalinaを勝者にするために生成できる可能なペアの数です。
限界1≤ T ≤100小セット
1≤ A ≤1000 1≤ B ≤1000 1≤ K ≤1000大規模データセット
1≤ A ≤109 1≤ B ≤109 1≤ K ≤109サンプル
Input Output 5 Case #1: 10 3 4 2 Case #2: 16 4 5 2 Case #3: 52 7 8 5 Case #4: 2411 45 56 35 Case #5: 14377 103 143 88最初のテストケースでは、新旧のマシンによって生成された10のペアがそれぞれ勝者となります。<0,0>、<0,1>、<0,2>、<0,3> 、<1,0>、<1,1>、<1,2>、<1,3>、<2,0>および<2,1>。<0,1>は<1,0>と同じではないことに注意してください。また、ペア<2、2>はマシンによって生成される可能性がありますが、(2 AND 2)= 2であり、彼女は数字の0と1しか購入しなかったため、カタリナは勝ちません。
実際の問題のリンクは次のとおりです:https : //code.google.com/codejam/contest/2994486/dashboard#s=p1
これはコードゴルフなので、最短のコードが優先されます。幸運を