• Source
    1. #include "bits/stdc++.h"
    2. #define sz 103
    3. #define MP make_pair
    4.  
    5. using namespace std;
    6.  
    7. int dx[8],dy[8];
    8.  
    9. int r,c,check[sz][sz],tot[sz][sz];
    10.  
    11. void bfs()
    12. {
    13. queue<int>Q,Q1;
    14.  
    15. int visit,x,y,u,v,i;
    16.  
    17. Q.push(0);
    18.  
    19. Q1.push(0);
    20.  
    21. check[0][0] = 1;
    22.  
    23. while(!Q.empty())
    24. {
    25. u = Q.front();
    26.  
    27. Q.pop();
    28.  
    29. v = Q1.front();
    30.  
    31. Q1.pop();
    32.  
    33. visit = 0;
    34.  
    35. set< pair<int,int> >sii;
    36.  
    37. for(i=0;i<8;i++)
    38. {
    39. x = u+dx[i];
    40.  
    41. y = v+dy[i];
    42.  
    43. if(x<0||y<0||x>=r||y>=c)
    44. {
    45. continue;
    46. }
    47.  
    48. if(check[x][y]!=-1 && sii.find(MP(x,y))==sii.end())
    49. {
    50. visit++;
    51.  
    52. sii.insert(MP(x,y));
    53. }
    54.  
    55. if(check[x][y]==0)
    56. {
    57. check[x][y] = 1;
    58.  
    59. Q.push(x);
    60.  
    61. Q1.push(y);
    62. }
    63. }
    64.  
    65. tot[u][v] = visit;
    66. }
    67.  
    68. return ;
    69. }
    70.  
    71. int main()
    72. {
    73. int tc=0,test,m,n,w,i,j,odd,even,x,y;
    74.  
    75. scanf("%d",&test);
    76.  
    77. while(test--)
    78. {
    79. scanf("%d%d%d%d",&r,&c,&m,&n);
    80.  
    81. scanf("%d",&w);
    82.  
    83. dx[0] = m,dy[0] = n;
    84. dx[1] = m,dy[1] = -n;
    85. dx[2] = -m,dy[2] = n;
    86. dx[3] = -m,dy[3] = -n;
    87. dx[4] = n,dy[4] = m;
    88. dx[5] = n,dy[5] = -m;
    89. dx[6] = -n,dy[6] = m;
    90. dx[7] = -n,dy[7] = -m;
    91.  
    92. for(i=1;i<=w;i++)
    93. {
    94. scanf("%d%d",&x,&y);
    95.  
    96. check[x][y] = -1;
    97. }
    98.  
    99. bfs();
    100.  
    101. odd = 0;
    102.  
    103. even = 0;
    104.  
    105. if(tot[0][0]==0)
    106. tot[0][0] = 2;
    107.  
    108. for(i=0;i<r;i++)
    109. {
    110. for(j=0;j<c;j++)
    111. {
    112. if(tot[i][j])
    113. {
    114. if(tot[i][j] & 1)
    115. {
    116. odd++;
    117. }
    118. else
    119. {
    120. even++;
    121. }
    122. }
    123. }
    124. }
    125.  
    126. printf("Case %d: %d %d\n",++tc,even,odd);
    127.  
    128. memset(tot,0,sizeof tot);
    129.  
    130. memset(check,0,sizeof check);
    131.  
    132. }
    133.  
    134. return 0;
    135. }