fork download
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. #include<map>
  5. #include<algorithm>
  6. #include<queue>
  7. #include<fstream>
  8. #include<bitset>
  9. using namespace std;
  10.  
  11. vector<vector<bool> > v;
  12. vector<vector<bool> > visited;
  13. long long c;
  14. long long n, m;
  15.  
  16. long long moveX[] = { 0,1,0,-1 };
  17. long long moveY[] = { 1,0,-1,0 };
  18.  
  19. void dfs(long long i, long long j)
  20. {
  21. if (visited[i][j])
  22. return;
  23. if (v[i][j] == 0)
  24. return;
  25. visited[i][j] = true;
  26. c++;
  27. for (long long k = 0; k < 4; k++)
  28. {
  29. long long a = i + moveX[k];
  30. long long b = j + moveY[k];
  31. if (a < 0 || a >= n || b < 0 || b >= m)
  32. continue;
  33. dfs(a, b);
  34. }
  35. }
  36.  
  37. int main()
  38. {
  39. ifstream cin("zamalek.in");
  40. long long t;
  41. cin >> t;
  42. while (t--)
  43. {
  44. long long x, k;
  45. cin >> x >> k >> n >> m;
  46. v.assign(n, vector<bool>(m));
  47.  
  48. for (long long i = 0; i < n; i++)
  49. {
  50. for (long long j = 0; j < m; j++)
  51. {
  52. char ch;
  53. cin >> ch;
  54. v[i][j] = (ch == '.');
  55. }
  56. }
  57.  
  58. long long ans = 0;
  59. visited.assign(n, vector<bool>(m, 0));
  60. for (long long i = 0; i < n; i++)
  61. {
  62. for (long long j = 0; j < m; j++)
  63. {
  64. if (visited[i][j] || v[i][j]==0)
  65. continue;
  66. c = 0;
  67. dfs(i, j);
  68. long long groups = c / k;
  69. groups = min(groups, x);
  70. ans += groups * k;
  71. x -= groups;
  72. }
  73. }
  74.  
  75. cout << ans << endl;
  76. }
  77.  
  78. return 0;
  79. }
Success #stdin #stdout 0s 4416KB
stdin
Standard input is empty
stdout
Standard output is empty