Advertisement
a53

FeteSiBaieti

a53
Jun 16th, 2021
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. ifstream fin("fetesibaieti.in");
  5. ofstream fout("fetesibaieti.out");
  6. const int di[]= {-1, 0, 1, 0}, dj[]= { 0, 1, 0,-1};
  7. int N, M, K, D;
  8. string s;
  9. int mat[2001][2001], mat2[4001][4001];
  10. void Fill1(int istart,int jstart,int v)
  11. {
  12. queue<pair<int,int>> Q;
  13. Q.push(make_pair(istart, jstart));
  14. mat[istart][jstart] = v;
  15. while(! Q.empty())
  16. {
  17. int i = Q.front().first, j = Q.front().second;
  18. for(int k = 0 ; k < 4 ; k ++)
  19. {
  20. int iv = i + di[k], jv = j + dj[k];
  21. if(iv>=1 && iv<=K && jv>=1 && jv<=D && mat[iv][jv]==0)
  22. {
  23. mat[iv][jv] = v;
  24. Q.push(make_pair(iv, jv));
  25. }
  26. }
  27. Q.pop();
  28. }
  29. }
  30. void Fill2(int istart,int jstart,int v, int L, int C)
  31. {
  32. queue<pair<int,int>> Q1;
  33. Q1.push(make_pair(istart, jstart));
  34. mat2[istart][jstart]=v;
  35. while(!Q1.empty())
  36. {
  37. int i=Q1.front().first, j=Q1.front().second;
  38. for(int k=0 ; k<4; k++)
  39. {
  40. int iv=i+di[k], jv=j+dj[k];
  41. if(iv>=1 && iv<=L && jv>=1 && jv<=C && mat2[iv][jv]==0)
  42. {
  43. mat2[iv][jv]=v;
  44. Q1.push(make_pair(iv, jv));
  45. }
  46. }
  47. Q1.pop();
  48. }
  49. }
  50. int main()
  51. {
  52. int i=0, j;
  53. fin>>K>>N>>D;
  54. M=N/D;
  55. fin>>s;
  56. if(K==D)
  57. {
  58. int cnt=0, b=0;
  59. for(i=0; i<K; ++i)
  60. if(s[i]=='b')
  61. b++;
  62. else
  63. {
  64. if(b)
  65. cnt++;
  66. b=0;
  67. }
  68. if(b)
  69. cnt++;
  70. fout<<cnt;
  71. }
  72. else if(N==D && K<D)
  73. {
  74. i=0;
  75. for(int k=1; k<=K; k++)
  76. {
  77. for(int d=1; d<=D; d++)
  78. {
  79. if(s[i]=='f')
  80. mat[k][d]=1;
  81. i++;
  82. if(i==K)
  83. i=0;
  84. }
  85. if(i==K)
  86. i=0;
  87. }
  88. int sol=0;
  89. for(i=1; i<=K; ++i)
  90. for(j=1; j<=D; ++j)
  91. if(!mat[i][j])
  92. {
  93. sol++;
  94. Fill1(i,j,sol);
  95. }
  96. fout<<sol;
  97. }
  98. else
  99. {
  100. if(M*K<=4000)
  101. {
  102. int second=0, v=2;
  103. i=0;
  104. for(int k=1; k<=M*K; k++)
  105. {
  106. for(int d=1; d<=D; d++)
  107. {
  108. if(s[i]=='f')
  109. mat2[k][d]=1;
  110. i++;
  111. if(i==K)
  112. i=0;
  113. }
  114. if(i==K)
  115. i=0;
  116. }
  117. for(i=1; i<=M*K; ++i)
  118. for( j=1; j<=D; ++j)
  119. if(!mat2[i][j])
  120. {
  121. second++;
  122. Fill2(i,j,v, M*K, D);
  123. }
  124. fout<<second;
  125. }
  126. else
  127. {
  128. i=0;
  129. for(int k=1; k<=K; k++)
  130. {
  131. for(int d=1; d<=D; d++)
  132. {
  133. if(s[i]=='f')
  134. mat[k][d]=1;
  135. i++;
  136. if(i==K)
  137. i=0;
  138. }
  139. if(i==K)
  140. i=0;
  141. }
  142. int p1=0, v=2;
  143. for(i=1; i<=K; ++i)
  144. for(j=1; j<=D; ++j)
  145. if(!mat[i][j])
  146. {
  147. p1++;
  148. Fill1(i,j,v);
  149. }
  150. int p2=0, v1=2;
  151. i=0;
  152. for(int k=1; k<=2*K; k++)
  153. {
  154. for(int d=1; d<=D; d++)
  155. {
  156. if(s[i]=='f')
  157. mat2[k][d]=1;
  158. i++;
  159. if(i==K)
  160. i=0;
  161. }
  162. if(i==K)
  163. i=0;
  164. }
  165. for(i=1; i<=2*K; ++i)
  166. for( j=1; j<=D; ++j)
  167. if(!mat2[i][j])
  168. {
  169. p2++;
  170. Fill2(i,j,v1, 2*K, D);
  171. }
  172. fout<<M*p1-((M-1)*(2*p1-p2));
  173. }
  174. }
  175. return 0;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement