解いた問題

9/21/2012

SRM434 Div1 Easy

250

やるだけ



  1. class FindingSquareInTable {  
  2. public:  
  3.   int findMaximalSquare(vector <string> table)  
  4.   {  
  5.     const int H = table.size();  
  6.     const int W = table[0].size();  
  7.   
  8.     set<lli> s;  
  9.     for (lli i = 0; i * i <= 999999999LL; ++i) {  
  10.       s.insert(i * i);  
  11.     }  
  12.   
  13.     lli mx = -1;  
  14.     for (int i = 0; i < H; ++i) {  
  15.       for (int j = 0; j < W; ++j) {  
  16.         for (int a = -10; a <= +10; ++a) {  
  17.           for (int b = -10; b <= +10; ++b) {  
  18.             if (a == 0 && b == 0) continue;  
  19.             string t;  
  20.             int v = i;  
  21.             int u = j;  
  22.             while (0 <= v && v < H && 0 <= u && u < W) {  
  23.               t += table[v][u];  
  24.               v += a;  
  25.               u += b;  
  26.               lli n = atoll(t.c_str());  
  27.               if (s.count(n)) mx = max(mx, n);  
  28.             }  
  29.           }  
  30.         }  
  31.       }  
  32.     }  
  33.     return mx;  
  34.   }  
  35. };