Source code for submission s1409

ants.cpp

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. typedef struct
  6. {
  7. int x;
  8. bool vpravo;
  9. int pozice;
  10. bool stridani;
  11. bool stridani2;
  12. } bod;
  13.  
  14. int fmax(int c1, int c2)
  15. {
  16. return (c1>c2)?c1:c2;
  17. }
  18.  
  19. int main()
  20. {
  21. int l, a, x;
  22. char s;
  23. while(scanf("%d %d", &l, &a) == 2)
  24. {
  25. int pole[l];
  26. bod mravenci[a];
  27. for(int i=0; i<l; i++)
  28. {
  29. pole[i] = 0;
  30. }
  31. for(int i=0; i<a; i++)
  32. {
  33. scanf("%d %c", &x, &s);
  34. bod b;
  35. b.x = x;
  36. b.pozice = x;
  37. b.stridani = false;
  38. b.stridani2 = false;
  39. if(s == 'R')
  40. {
  41. pole[x] = 1;
  42. b.vpravo = true;
  43. }
  44. else
  45. {
  46. pole[x] = 2;
  47. b.vpravo = false;
  48. }
  49. mravenci[i] = b;
  50. }
  51. int minpravy = -1;
  52. int j = 0;
  53. while (j < l)
  54. {
  55. if (pole[j] == 1)
  56. {
  57. minpravy = j;
  58. break;
  59. }
  60. j++;
  61. }
  62. int maxlevy = -1;
  63. j = l-1;
  64. while (j >= 0)
  65. {
  66. if (pole[j] == 2)
  67. {
  68. maxlevy = j;
  69. break;
  70. }
  71. j--;
  72. }
  73. if (minpravy != -1)
  74. minpravy = l-minpravy;
  75. for(int k=0; k<fmax(minpravy,maxlevy); k++)
  76. {
  77. for(int i=0; i<a; i++)
  78. {
  79. for(int j=0; j<a; j++)
  80. {
  81. if ((mravenci[i].x+1 == mravenci[j].x) && (mravenci[i].vpravo) && (!mravenci[j].vpravo))
  82. {
  83. mravenci[i].vpravo = false;
  84. mravenci[j].vpravo = true;
  85. mravenci[i].stridani = true;
  86. mravenci[j].stridani = true;
  87. }
  88. if ((mravenci[i].x+2 == mravenci[j].x) && (mravenci[i].vpravo) && (!mravenci[j].vpravo))
  89. {
  90. mravenci[i].stridani2 = true;
  91. mravenci[j].stridani2 = true;
  92. }
  93. }
  94. }
  95. for(int i=0; i<a; i++)
  96. {
  97. if (mravenci[i].vpravo)
  98. {
  99. if (mravenci[i].stridani2)
  100. {
  101. mravenci[i].stridani2 = false;
  102. mravenci[i].x++;
  103. mravenci[i].vpravo = false;
  104. }
  105. else if (mravenci[i].stridani)
  106. {
  107. mravenci[i].stridani = false;
  108. }
  109. else
  110. {
  111. mravenci[i].x++;
  112. }
  113. }
  114. else
  115. {
  116. if (mravenci[i].stridani2)
  117. {
  118. mravenci[i].stridani2 = false;
  119. mravenci[i].x--;
  120. mravenci[i].vpravo = true;
  121. }
  122. else if (mravenci[i].stridani)
  123. {
  124. mravenci[i].stridani = false;
  125. }
  126. else
  127. {
  128. mravenci[i].x--;
  129. }
  130. }
  131. }
  132.  
  133.  
  134. }
  135.  
  136. int maxx = -1;
  137. int maxy = -1;
  138. if (minpravy == maxlevy)
  139. {
  140. for(int i=0; i<a; i++)
  141. {
  142. if (mravenci[i].x == 0)
  143. {
  144. maxx = mravenci[i].pozice;
  145. }
  146. }
  147. for(int i=0; i<a; i++)
  148. {
  149. if (mravenci[i].x == l)
  150. {
  151. maxy = mravenci[i].pozice;
  152. }
  153. }
  154. printf("The last and will fall down in %d seconds - started at %d and %d.\n",minpravy, maxx, maxy);
  155. }
  156. else if (minpravy > maxlevy)
  157. {
  158. for(int i=0; i<a; i++)
  159. {
  160. if (mravenci[i].x == 0)
  161. {
  162. maxx = mravenci[i].pozice;
  163. }
  164. }
  165. printf("The last and will fall down in %d seconds - started at %d.\n",minpravy, maxx);
  166. }
  167. else if (maxlevy > minpravy)
  168. {
  169. for(int i=0; i<a; i++)
  170. {
  171. if (mravenci[i].x == l)
  172. {
  173. maxy = mravenci[i].pozice;
  174. }
  175. }
  176. printf("The last and will fall down in %d seconds - started at %d.\n",maxlevy, maxy);
  177. }
  178.  
  179.  
  180.  
  181. }
  182. return 0;
  183. }
  184.  
  185.