解いた問題

9/21/2012

SRM434 Div1 Easy

250

やるだけ



class FindingSquareInTable {
public:
  int findMaximalSquare(vector <string> table)
  {
    const int H = table.size();
    const int W = table[0].size();

    set<lli> s;
    for (lli i = 0; i * i <= 999999999LL; ++i) {
      s.insert(i * i);
    }

    lli mx = -1;
    for (int i = 0; i < H; ++i) {
      for (int j = 0; j < W; ++j) {
        for (int a = -10; a <= +10; ++a) {
          for (int b = -10; b <= +10; ++b) {
            if (a == 0 && b == 0) continue;
            string t;
            int v = i;
            int u = j;
            while (0 <= v && v < H && 0 <= u && u < W) {
              t += table[v][u];
              v += a;
              u += b;
              lli n = atoll(t.c_str());
              if (s.count(n)) mx = max(mx, n);
            }
          }
        }
      }
    }
    return mx;
  }
};