fork download
  1. /*
  2. GIVES WA
  3. */
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6.  
  7. #define fastio \
  8.   ios_base::sync_with_stdio(0); \
  9.   cin.tie(0); \
  10.   cout.tie(0)
  11.  
  12. typedef long long ll;
  13. typedef pair<ll, ll> pll;
  14. const ll MOD = 1000000007;
  15. const ll INF = 1e18;
  16. const ll MAX_SIZE = 55;
  17.  
  18. // 8 directions
  19. const ll rows[] = {1, -1, 0, 0, 1, -1, 1, -1};
  20. const ll cols[] = {0, 0, 1, -1, 1, -1, -1, 1};
  21.  
  22. char arr[MAX_SIZE][MAX_SIZE];
  23. ll dp[MAX_SIZE][MAX_SIZE];
  24. ll N, M;
  25.  
  26. bool isValid(ll i, ll j)
  27. {
  28. return ((i >= 1 and i <= N) and (j >= 1 and j <= M));
  29. }
  30.  
  31. int main()
  32. {
  33. fastio;
  34. //freopen('input.txt','r',stdin);
  35. //freopen('output.txt','w',stdout);
  36. ll cnt = 0;
  37. while (true)
  38. {
  39. cnt++;
  40. cin >> N >> M;
  41. if (!N and !M)
  42. break;
  43.  
  44. ll longest = 0;
  45. for (int i = 1; i <= N; i++)
  46. for (int j = 1; j <= M; j++)
  47. {
  48. dp[i][j] = 0;
  49. cin >> arr[i][j];
  50.  
  51. if (arr[i][j] == 'A')
  52. dp[i][j] = 1;
  53. }
  54.  
  55. for (char ch = 'A'; ch <= 'Z'; ch++)
  56. {
  57. for (int i = 1; i <= N; i++)
  58. for (int j = 1; j <= M; j++)
  59. {
  60. if (arr[i][j] != ch)
  61. continue;
  62.  
  63. for (int k = 0; k < 8; k++)
  64. {
  65. ll newX = i + rows[k];
  66. ll newY = j + cols[k];
  67. if (isValid(newX, newY) and (arr[newX][newY] == (ch - 1)))
  68. {
  69. dp[i][j] = max(dp[newX][newY] + 1, dp[i][j]);
  70. }
  71. longest = max(longest, dp[i][j]);
  72. }
  73. }
  74. }
  75.  
  76. cout << "Case " << cnt << ": " << longest << endl;
  77. }
  78.  
  79. return 0;
  80. }
  81. // END OF SOURCE CODE
Success #stdin #stdout 0s 15264KB
stdin
1 1
B
1 1
A
0 0
stdout
Case 1: 0
Case 2: 1