fork download
  1.  
  2.  
  3.  
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6.  
  7. #define pii pair<int,int>
  8. #define pip pair<int,pii>
  9. #define pb push_back
  10. #define mp make_pair
  11. #define ff first
  12. #define ss second
  13. #define MOD 1000000007
  14.  
  15. typedef long long ll;
  16. int dx[]={1,-1,0,0,-1,1,-1,1};
  17. int dy[]={0,0,1,-1,-1,1,1,-1};
  18.  
  19. vector<string> grid;
  20. vector<pii> points;
  21. vector<pii> visited;
  22. int area=0;
  23.  
  24. bool isValid(pii point)
  25. {
  26. int x=point.ff; int y=point.ss;
  27. if(x<0 || x>=99 || y<0 || y>=99)
  28. return false;
  29. return true;
  30. }
  31.  
  32. void dfs(pii start)
  33. {
  34. if(find(visited.begin(),visited.end(),start)!=visited.end())
  35. return;
  36.  
  37. visited.pb(start);
  38. area++;
  39.  
  40. int x=start.ff;
  41. int y=start.ss;
  42.  
  43. for(int k=0;k<8;k++)
  44. {
  45. int nx=x+dx[k];
  46. int ny=y+dy[k];
  47. pii next=make_pair<int,int>(nx,ny);
  48.  
  49. if(find(visited.begin(),visited.end(),next)==visited.end() && grid[nx][ny]=='W' && isValid(next))
  50. {
  51. dfs(next);
  52. }
  53. }
  54.  
  55. }
  56.  
  57. int main()
  58. {
  59. int T;
  60. scanf("%d",&T);
  61. getchar();
  62. getchar();
  63.  
  64. for(int t=0;t<T;t++)
  65. {
  66. char inp[100];
  67. while(gets(inp) && strlen(inp)>0)
  68. {
  69. if(inp[0]=='L' || inp[0]=='W')
  70. {
  71. string p(inp);
  72. grid.pb(p);
  73. }
  74. else
  75. {
  76. int r,c;
  77. sscanf(inp,"%d %d",&r,&c);
  78. r--;c--;
  79. dfs(make_pair<int,int>(r,c));
  80. cout<<area<<endl;
  81. area=0;
  82.  
  83. }
  84. }
  85.  
  86. cout<<endl;
  87. visited.clear();
  88. grid.clear();
  89. points.clear();
  90. }
  91.  
  92. return 0;
  93. }
  94.  
Success #stdin #stdout 0s 2824KB
stdin
1

LLLLLLLLL
LLWWLLWLL
LWWLLLLLL
LWWWLWWLL
LLLWWWLLL
LLLLLLLLL
LLLWWLLWL
LLWLWLLLL
LLLLLLLLL
3 2
7 5
stdout
12
4