研究開発者・ellerのTopCoder挑戦記録。言語は主にJavaを使用しています。ドキュメンテーションコメントはSubmit完了後、ブログ掲載前に補完したものです。21:06http://www.topcoder.com/stat?c=problem_statement&pm=10044&rd=13518『アルファベットをK文字しか教えられない教師がいる。教師は生徒が与えられた単語(文字列)を数多く読めるよう、教えるべき文字を選ぶ。このとき生徒は最大で何単語読めるようになるか。』アルファベットは26文字なので問題なくint型(32ビット)によってビットフラグ化できます。今回は各単語に使われている文字列をビットフラグ化することで、論理積のみで単語が読めるか否かを判別できるようにしました。組み合わせの導出には神戸大学の教授でいらっしゃる谷崎久志さんのウェブサイトにある「組み合わせを求めるプログラムについて」をJavaへ移植させていただきました。1度Submitに失敗したのですが、原因は教師が教える単語数が0の場合を想定していなかったこと。条件を飛ばさず読むようにしなければなりません。21:47以前実装したIterableなJava版next_permutationと同じように、C++のnext_combinationをJavaのIterable<Long>に置き換えて実装したもの。以下のようなコードで簡単に利用することができます。ビットフラグにはlong型を利用したため、最大で62個の組み合わせまで対応できます。*/アルゴリズムは谷崎久志さんのウェブサイトにある「組み合わせを求めるプログラムについて」をJavaへ移植したものです。わかりやすい資料を公開してくださいまして、ありがとうございます。classをコピーして使用すること。