Source code for submission s1403

ants.c

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