Hatena::Grouptopcoder

TopCoder煮ブログ

本家ブログはこっち → http://d.hatena.ne.jp/nitoyon/

2008-10-03

日本人上位coder

| 18:11 | 日本人上位coder - TopCoder煮ブログ を含むブックマーク はてなブックマーク - 日本人上位coder - TopCoder煮ブログ

はてな界隈で SRM キーワードで探してきた中から、yellow 以上の人をピックアップ。

問題の振り返りをブログでしてくれてるので、非常に参考になる。

とてもじゃないけど追いつけなさそうで絶望的になる…。

SRM420 DIV1

| 21:27 | SRM420 DIV1 - TopCoder煮ブログ を含むブックマーク はてなブックマーク - SRM420 DIV1 - TopCoder煮ブログ

1問だけ解けた。

12421268

SolitaireSimulation

前回 0 だったので、慎重に解いたら18分かかった。ostringstream を初めて使ったり、multiset を初めて使ったりしてるうちに、時間を浪費してしまった。上位の回答を見ていると、vector を std::sort してそのまま使ってる人が多い。ふむふむ。

RedIsGood

なんか難しそうだったのでパス。意外に解けてる人が多かった。あとで。

ChangeOMatic

簡単そうに見えて挑戦するも、時間内に解けず。遅い。トップダウンで方針は決定したものの、ボトムアップで書いて悩んでるうちに、全体を見失って混乱してしまった。あとで。

感想

DIV1 の 500 を解けたことがない。そこを解けるようにならないと、yellow は遠い。

algorithm の壁

| 23:48 | algorithm の壁 - TopCoder煮ブログ を含むブックマーク はてなブックマーク - algorithm の壁 - TopCoder煮ブログ

std::sort 便利。vector をソートするには

sort(vec.begin(), vec.end());

とする。第3引数で関数オブジェクトを渡す比較方法を変えられる。greater を渡すと降順になる。

sort(vec.begin(), vec.end(), greater<int>());

関数オブジェクトおもしろい。

map みたいなこともできる。

vector<int> vec;
vec.push_back(1);
vec.push_back(3);
vec.push_back(2);
transform(vec.begin(), vec.end(), vec.begin(), negate<int>());
// -1 -3 -2

全部の要素の正負が反転する。

要素を足すには plus 関数オブジェクトの片方を束縛してやる。

transform(vec.begin(), vec.end(), vec.begin(), 
  bind1st(plus<int>(), 1));
// 2 4 3

count_if なんかも便利そう。remove_if は終端の場所が iterator で帰ってくるので要注意。