SRM 511 Div2 Easy GameOfLifeDivTwo

問題

N個のセルが円上に並んでいる,各セルは1 or 0の状態を持ち,次のステップには以下の条件で状態が変わる.もし,自身と隣接するセルの状態の合計が2以上だった場合そのセルは次のステップで状態1になり,それ以外は状態0となる.
初期状態が与えられた時,Tステップ後の状態を返せ.

解答

やるだけ

class GameOfLifeDivTwo
{
public:
  string theSimulation(string init, int T)
    {
      int n = init.size();
      vector<bool> circle(n);
      int i , j, k;
      for(i = 0; i < n; i++){
        if (init[i] == '1') circle[i] = true;
        else circle[i] = false;
      }
      for(i = 0; i < T; i++){
        vector<bool> circle2(n);
        for(j = 0; j < n; j++){
          int num_live = 0;
          for(k = -1; k <= 1; k++){
            if (circle[(j+k+n)%n]) num_live++;
          }
          if (num_live >= 2) circle2[j] = true;
          else circle2[j] = false;
        }
        circle = circle2;
      }
      string ret = "";
      for(i = 0; i < n; i++)
        if(circle[i]) ret += "1";
        else ret += "0";
      return ret;
    }
};