Source code for submission s1054

Go to diff to previous submission

ants.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int maximum(int a, int b){
  6. if(a > b){
  7. return 1;
  8. }
  9. else if(b > a){
  10. return 2;
  11. }
  12. else{
  13. return 0;
  14. }
  15. }
  16.  
  17. int maxi(int a, int b){
  18. if(a > b)
  19. return a;
  20. return b;
  21. }
  22.  
  23. int main(){
  24. int l, a, apom, i, j, best1, best2;
  25. char dir;
  26. int pos;
  27. int *arr;
  28. int *arr2;
  29. int arrpos[100000];
  30. int pomr;
  31. int pomc1, pomc2;
  32. int prohozeno, li1, li2, tmp;
  33. int prvni, pocindex, end, endindex;
  34. while(scanf("%d %d\n", &l, &a) == 2){
  35.  
  36. apom = a;
  37. best1 = -1;
  38. best2 = -1;
  39. li1 = -1;
  40. li2 = -1;
  41. pomc1 = -1;
  42. pomc2 = -1;
  43. arr = (int *)malloc(sizeof(int)*l);
  44. arr2 = (int *)malloc(sizeof(int)*l);
  45. memset(arr, 0, sizeof(int)*l);
  46. memset(arr2, 0, sizeof(int)*l);
  47. while(apom > 0){
  48. scanf("%d %c\n", &pos, &dir);
  49. if(dir == 'L')
  50. arr[pos] = 1;
  51. else
  52. arr[pos] = 2;
  53. arrpos[a-apom] = pos;
  54. apom--;
  55. }
  56. /*pole pripraveno na vypocet*/
  57. /*nejdrive zleva*/
  58. for(j=0;j < a; j++){
  59. i = arrpos[j];
  60. if(arr[i] == 2){
  61. best1 = l-i;
  62. li1 = i;
  63. pomc1 = l-i;
  64. break;
  65. }
  66. }
  67.  
  68.  
  69. /*jeste zprava*/
  70. for(j=a-1;j >= 0; j--){
  71. i = arrpos[j];
  72. if(arr[i] == 1){
  73. best2 = i;
  74. li2 = i;
  75. pomc2 = i;
  76. break;
  77. }
  78. }
  79. pomr = -1;
  80. prohozeno = 1;
  81. /*simulace indexu*/
  82. prvni = 1;
  83. pocindex = 0;
  84. endindex = a-1;
  85. if(li1 >= 0 && li2 >= 0){
  86. while(prohozeno == 1){
  87. prohozeno = 0;
  88. for(j=0;j < a; j++){
  89. i = arrpos[j];
  90. if(arr[i] == 2){
  91. pomr = i;
  92. if(prvni == 1){
  93. pocindex = j;
  94. prvni = 0;
  95. }
  96. }
  97. else if(arr[i] == 1 && pomr != -1){
  98. arr[pomr] = 1;
  99. arr[i] = 2;
  100. prohozeno = 1;
  101. li1 = i;
  102. li2 = pomr;
  103. arr2[i] = arr2[i] + 1;
  104. arr2[pomr] = arr2[pomr] + 1;
  105. pomr = -1;
  106. endindex = pocindex;
  107. }
  108. }
  109. pomr = -1;
  110. prvni = 1;
  111. }
  112. }
  113. if(li1 >= 0){
  114. /*neotocil se*/
  115. if(arr2[li1]%2 == 0){
  116. if(arr[li1] == 1)
  117. arr[li1] = 2;
  118. else
  119. arr[li1] = 1;
  120. }
  121. if(arr2[li1] == 2)
  122. pomc1 = l-i;
  123. else
  124. pomc1 = i;
  125.  
  126. }
  127. if(li2 >= 0){
  128. /*neotocil se*/
  129. if(arr2[li2]%2 == 0){
  130. if(arr[li2] == 1)
  131. arr[li2] = 2;
  132. else
  133. arr[li2] = 1;
  134. }
  135. if(arr2[li2] == 2)
  136. pomc2 = l-i;
  137. else
  138. pomc2 = i;
  139. }
  140. if(pomc1 == pomc2 && pomc1 != -1){
  141. if(li2 < li1){
  142. tmp = li1;
  143. li1 = li2;
  144. li2 = tmp;
  145. }
  146.  
  147. printf("The last ant will fall down in %d seconds - started at %d and %d.\n", maxi(best1, best2), li1, li2);
  148. }
  149. else
  150. printf("The last ant will fall down in %d seconds - started at %d.\n", maxi(best1, best2), maxi(li1, li2));
  151. }
  152. return 0;
  153. }
  154.  
  155.  
  156.  

Diff to submission s987

ants.c

--- c4.s987.cteam111.ants.c.0.ants.c
+++ c4.s1054.cteam111.ants.c.0.ants.c
@@ -31,4 +31,5 @@
         int pomc1, pomc2;
         int prohozeno, li1, li2, tmp;
+        int prvni, pocindex, end, endindex;
         while(scanf("%d %d\n", &l, &a) == 2){
         
@@ -79,4 +80,7 @@
                 prohozeno = 1;
                 /*simulace indexu*/
+                prvni = 1;
+                pocindex = 0;
+                endindex = a-1;
         if(li1 >= 0 && li2 >= 0){
                 while(prohozeno == 1){
@@ -84,6 +88,11 @@
                         for(j=0;j < a; j++){
                                 i = arrpos[j];
-                                if(arr[i] == 2)
+                                if(arr[i] == 2){
                                         pomr = i;
+                                        if(prvni == 1){
+                                                pocindex = j;
+                                                prvni = 0;
+                                        }
+                                }
                                 else if(arr[i] == 1 && pomr != -1){
                                         arr[pomr] = 1;
@@ -95,7 +104,9 @@
                                         arr2[pomr] = arr2[pomr] + 1;
                                         pomr = -1;
+                                        endindex = pocindex;
                                 }
                         }
                         pomr = -1;
+                        prvni = 1;
                 }
         }