Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.30 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<queue>
  4. #include<climits>
  5. using namespace std;
  6. ifstream fin("livada.in");
  7. ofstream fout("livada.out");
  8.  
  9. int a[1005][1005];
  10. int di[4]= {0,-1,0,1};
  11. int dj[4]= {-1,0,1,0};
  12.  
  13. queue<pair<int,int> >q;
  14.  
  15. int L,E;
  16. int locuri=0;
  17. int cateMax=0;
  18.  
  19. int cmmdc(int a, int b)
  20. {
  21. int r, d, i;
  22. d=a;
  23. i=b;
  24.  
  25. while(i>0)
  26. {
  27. r=d%i;
  28. d=i;
  29. i=r;
  30. }
  31.  
  32. return d;
  33.  
  34. }
  35.  
  36.  
  37. int Fill(int i, int j, int veche)
  38. {
  39. int k, nexti, nextj;
  40. int nou=-1;
  41. int cate=1;
  42.  
  43. q.push({i, j});
  44. a[i][j]=nou;
  45.  
  46. while(!q.empty())
  47. {
  48. i=q.front().first;
  49. j=q.front().second;
  50. q.pop();
  51.  
  52. for(k=0;k<4;k++)
  53. {
  54. nexti=i+di[k];
  55. nextj=j+dj[k];
  56. if(a[nexti][nextj]==veche)
  57. {
  58. cate++;
  59. q.push({nexti, nextj});
  60. a[nexti][nextj]=nou;
  61. }
  62. }
  63.  
  64. }
  65.  
  66. return cate;
  67.  
  68. }
  69.  
  70.  
  71. void Lee()
  72. {
  73. int k, nexti, nextj;
  74. int i1, j1;
  75. int i, j;
  76. int cateInitial, auxInitial;
  77. int cate, aux;
  78. int p;
  79.  
  80. while(!q.empty())
  81. {
  82. i1=q.front().first;
  83. j1=q.front().second;
  84. q.pop();
  85.  
  86. if(a[i1][j1]==2)
  87. {
  88. cateInitial=1;
  89. auxInitial=E-3;
  90. }
  91. else
  92. {
  93. cateInitial=0;
  94. auxInitial=E;
  95. }
  96.  
  97. for(k=0; k<4; k++)
  98. {
  99. i=i1;
  100. j=j1;
  101. //cout<<i<<" "<<j<<"\n"; cred ca aici e problema
  102. cate=cateInitial;
  103. aux=auxInitial;
  104.  
  105. for(p=0; p<=INT_MAX; p++)
  106. {
  107. nexti=i+di[k];
  108. nextj=j+dj[k];
  109.  
  110. if(a[nexti][nextj]==1)
  111. {
  112. break;
  113. }
  114. else
  115. {
  116. if(a[nexti][nextj]==0)
  117. {
  118. if(aux-1>=0)
  119. {
  120. aux--;
  121. i=nexti;
  122. j=nextj;
  123. }
  124. else
  125. {
  126. break;
  127. }
  128. }
  129.  
  130. if(a[nexti][nextj]==2)
  131. {
  132. if(aux-4>=0)
  133. {
  134. cate++;
  135. aux-=4;
  136. i=nexti;
  137. j=nextj;
  138. }
  139. else
  140. {
  141. break;
  142. }
  143. }
  144.  
  145. if(a[nexti][nextj]==-1)
  146. {
  147. if(aux-1>=0)
  148. {
  149. // aux--;
  150. //i=nexti;
  151. //j=nextj;
  152. locuri++;
  153. if(cate>cateMax)
  154. {
  155. cateMax=cate;
  156. }
  157.  
  158. }
  159. break;
  160. }
  161.  
  162. }
  163.  
  164. }
  165.  
  166. }
  167. }
  168.  
  169. }
  170.  
  171.  
  172. int main()
  173. {
  174. int c,n,m;
  175. int i,j;
  176.  
  177. fin>>c;
  178. fin>>n>>m;
  179.  
  180. for(i=1; i<=n; i++)
  181. {
  182. for(j=1; j<=m; j++)
  183. {
  184. fin>>a[i][j];
  185. }
  186. }
  187.  
  188. fin>>L>>E;
  189.  
  190. if(c==1)
  191. {
  192. int nrP;
  193. nrP=(n/L)*(m/L);
  194. fout<<nrP<<" "<<(n*m)-(nrP*L*L);
  195. }
  196.  
  197.  
  198. if(c==2)
  199. {
  200. fout<<cmmdc(n, m);
  201. }
  202.  
  203.  
  204. if(c==3)
  205. {
  206.  
  207. int numar;
  208. int max1=INT_MIN, max2=INT_MIN;
  209.  
  210. for(i=1;i<=n;i++)
  211. {
  212. for(j=1;j<=m;j++)
  213. {
  214. if(a[i][j]==1)
  215. {
  216. numar=Fill(i, j, 1);
  217. if(numar>max1)
  218. {
  219. max1=numar;
  220. }
  221. }
  222.  
  223. if(a[i][j]==2)
  224. {
  225. numar=Fill(i, j, 2);
  226. if(numar>max2)
  227. {
  228. max2=numar;
  229. }
  230. }
  231. }
  232. }
  233.  
  234. fout<<max1<<" "<<max2;
  235.  
  236. }
  237.  
  238.  
  239. if(c==4)
  240. {
  241. for(j=0; j<=m+1; j++)
  242. {
  243. a[0][j]=a[n+1][j]=-1;
  244. }
  245. for(i=0; i<=n+1; i++)
  246. {
  247. a[i][0]=a[i][m+1]=-1;
  248. }
  249.  
  250. for(i=2; i<n; i++)
  251. {
  252. for(j=2; j<m; j++)
  253. {
  254. if(a[i][j]!=1)
  255. {
  256. q.push({i,j});
  257. }
  258. }
  259. }
  260.  
  261. Lee();
  262. fout<<locuri<<" "<<cateMax;
  263.  
  264. /*while(!q.empty())
  265. {
  266. fout<<q.front().first<<" ";
  267. fout<<q.front().second;
  268. fout<<"\n";
  269. q.pop();
  270. }*/
  271.  
  272. /* for(i=0; i<=n+1; i++)
  273. {
  274. for(j=0; j<=m+1; j++)
  275. {
  276. fout<<a[i][j]<<" ";
  277. }
  278. fout<<"\n";
  279. }*/
  280. }
  281.  
  282.  
  283.  
  284. fin.close();
  285. fout.close();
  286. return 0;
  287.  
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement