Advertisement
a53

Avioane

a53
Jul 16th, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.53 KB | None | 0 0
  1. #include <fstream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. using namespace std;
  5. ifstream f("avioane.in");
  6. ofstream g("avioane.out");
  7. int tip1,tip2,tip3,tip4,tipx,lovit,picat,nou,s,trag;
  8. int i,j,k,l,n,a[305][305],sol,x,t,viz[10000];
  9.  
  10. void init_matrice()
  11. {
  12. int i,j;
  13. for(i=1;i<=300;++i)
  14. for(j=1;j<=300;++j)
  15. a[i][j]=0;
  16. }
  17.  
  18. int tipul1(int n,int x,int y,int &s)
  19. {
  20. int sol=(a[x][y]%100000==a[x+2][y]%100000)&&(x<=n-3)&&(y>=3)&&(y<=n-2);
  21. int k;
  22. s=a[x][y]+a[x+2][y];
  23. for(k=1;k<=5&&sol;++k)
  24. {
  25. sol=(a[x][y]%100000==a[x+1][y-3+k]%100000);
  26. s+=a[x+1][y-3+k];
  27. }
  28. for(k=1;k<=3&&sol;++k)
  29. {
  30. sol=(a[x][y]%100000==a[x+3][y-2+k]%100000);
  31. s+=a[x+3][y-2+k];
  32. }
  33. return sol;
  34. }
  35.  
  36. int tipul2(int n,int x,int y,int &s)
  37. {
  38. int sol=(a[x][y]%100000==a[x][y-2]%100000)&&(x<=n-2)&&(x>=3)&&(y>=4);
  39. int k;
  40. s=a[x][y]+a[x][y-2];
  41. for(k=1;k<=5&&sol;++k)
  42. {
  43. sol=(a[x][y]%100000==a[x-3+k][y-1]%100000);
  44. s+=a[x-3+k][y-1];
  45. }
  46. for(k=1;k<=3&&sol;++k)
  47. {
  48. sol=(a[x][y]%100000==a[x-2+k][y-3]%100000);
  49. s+=a[x-2+k][y-3];
  50. }
  51. return sol;
  52. }
  53.  
  54. int tipul3(int n,int x,int y,int &s)
  55. {
  56. int sol=(a[x][y]%100000==a[x-2][y]%100000)&&(x>=4)&&(y>=3)&&(y<=n-2);
  57. int k;
  58. s=a[x][y]+a[x-2][y];
  59. for(k=1;k<=5&&sol;++k)
  60. {
  61. sol=(a[x][y]%100000==a[x-1][y-3+k]%100000);
  62. s+=a[x-1][y-3+k];
  63. }
  64. for(k=1;k<=3&&sol;++k)
  65. {
  66. sol=(a[x][y]%100000==a[x-3][y-2+k]%100000);
  67. s+=a[x-3][y-2+k];
  68. }
  69. return sol;
  70. }
  71.  
  72. int tipul4(int n,int x,int y,int &s)
  73. {
  74. int sol=(a[x][y]%100000==a[x][y+2]%100000)&&(x<=n-2)&&(x>=3)&&(y<=n-3);
  75. int k;
  76. s=a[x][y]+a[x][y+2];
  77. for(k=1;k<=5&&sol;++k)
  78. {
  79. sol=(a[x][y]%100000==a[x-3+k][y+1]%100000);
  80. s+=a[x-3+k][y+1];
  81. }
  82. for(k=1;k<=3&&sol;++k)
  83. {
  84. sol=(a[x][y]%100000==a[x-2+k][y+3]%100000);
  85. s+=a[x-2+k][y+3];
  86. }
  87. return sol;
  88. }
  89.  
  90. void rezolva()
  91. {
  92. f>>n>>trag;
  93. tipx=1;
  94. viz[0]=1;
  95. int total=0;;
  96.  
  97. for(i=1;i<=n;++i)
  98. for(j=1;j<=n;++j)
  99. {
  100. f>>a[i][j];
  101. if (viz[a[i][j]]==0)
  102. {
  103. viz[a[i][j]]=1;
  104. total++;
  105. }
  106. }
  107. g<<total<<'\n';
  108. tip1=tip2=tip3=tip4=lovit=picat=nou=0;
  109. int x,y;
  110. for(i=1;i<=trag;i++)
  111. {
  112. f>>x>>y;
  113. a[x][y]+=100000;
  114. }
  115. for(i=1;i<=n;++i)
  116. for(j=1;j<=n;++j)
  117. {
  118. s=0;
  119. if (a[i][j]%100000>0)
  120. {
  121. if(tipul1(n,i,j,s)>0)
  122. {
  123. tip1++;
  124. if (a[i][j]>100000) ++picat;
  125. else
  126. if (s/100000>=5) ++picat;
  127. else
  128. if(s/100000>0) ++lovit;
  129. }
  130. else
  131. if(tipul2(n,i,j,s)>0)
  132. {
  133. tip2++;
  134. if (a[i][j]>100000) ++picat;
  135. else
  136. if (s/100000>=5) ++picat;
  137. else
  138. if(s/100000>0) ++lovit;
  139. }
  140. else
  141. if(tipul3(n,i,j,s)>0)
  142. {
  143. tip3++;
  144. if (a[i][j]>100000) ++picat;
  145. else
  146. if (s/100000>=5) ++picat;
  147. else
  148. if(s/100000>0) ++lovit;
  149. }
  150. else
  151. if(tipul4(n,i,j,s)>0)
  152. {
  153. tip4++;
  154. if (a[i][j]>100000) ++picat;
  155. else
  156. if (s/100000>=5) ++picat;
  157. else
  158. if(s/100000>0) ++lovit;
  159. }
  160. }
  161. else
  162. {
  163. if (nou==0)
  164. switch (tipx)
  165. {
  166. case 1: if(tipul1(n,i,j,s)>0)
  167. if (s%100000==0)
  168. {
  169. nou=1;
  170. x=i;
  171. y=j;
  172. }
  173. break;
  174. case 2: if(tipul2(n,i,j,s)>0)
  175. if (s%100000==0)
  176. {
  177. nou=1;
  178. x=i;
  179. y=j;
  180. }
  181. break;
  182. case 3: if(tipul3(n,i,j,s)>0)
  183. if (s%100000==0)
  184. {
  185. nou=1;
  186. x=i;
  187. y=j;
  188. }
  189. break;
  190. case 4: if(tipul4(n,i,j,s)>0)
  191. if (s%100000==0)
  192. {
  193. nou=1;
  194. x=i;
  195. y=j;
  196. }
  197. break;
  198. }
  199. }
  200. }
  201. g<<tip1<<'\n'<<tip2<<'\n'<<tip3<<'\n'<<tip4<<'\n'<<lovit<<'\n'<<picat<<'\n';
  202. }
  203. int main()
  204. {
  205. rezolva();
  206. f.close();
  207. g.close();
  208. return 0;
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement