SRM450 DIV2

やっぱり英文の読解に時間がかかってしまう。
250点問題だけでも素早く解ければ状況も変わってきそうなんだけどなあ。
成長してないのがばればれですorz
rateも落ちて散々な結果。グリーンコーダーが遠いよ・・・

250

指定されたビットパターンを得るまでにビット操作を何回すればいいかっていう問題。
最初問題文の意味が理解できなくてしばらく固まってしまった。
おまけにstringのメンバー関数を忘れてて、あれこれ調べて時間を浪費してしまったしorz
最初からchar型で行けばよかった。それでもなんとか130点ちょい獲得。
C++もきちんと使おうっていう教訓を得た。
解法は架空のコンピューターの動作をそのまま実装して、ビットが変化した回数を調べました。
他の人の解法は先頭からビットが変化した回数だけ調べていた人が多くてへこむ。そっちのが美しいじゃないかあああ。

#include <iostream>
#include <string>

using namespace std;

class StrangeComputer
{
  public:
  int setMemory(string mem)
  {
    int ans = 0;
    int m_size = mem.size();
    char buf[m_size];

    memset(buf, '0', m_size);

    for(int i = 0; i < m_size; i++)
    {
      if(buf[i] != mem[i])
      {
        memset(buf + i, buf[i] == '0' ? '1' : '0', m_size - i);
        ans++;
      }
    }

    return ans;
  }
};

500

Nimで勝つのはどっちかっていう問題。
なんとなく解けそうなところまで辿り着いたけど、必勝法があったなあとか脱線を始めて探して読んでたら時間切れした。
たぶんそのまま考えて実装しても間に合わなかっただろうから、解けなかったも同然orz
組合わせとかちょっとでも数学の姿が見えると途端に駄目になるのは何とかしたいな。

1000

あーあー聞こえなーい