Source code for submission s987

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. while(scanf("%d %d\n", &l, &a) == 2){
  34.  
  35. apom = a;
  36. best1 = -1;
  37. best2 = -1;
  38. li1 = -1;
  39. li2 = -1;
  40. pomc1 = -1;
  41. pomc2 = -1;
  42. arr = (int *)malloc(sizeof(int)*l);
  43. arr2 = (int *)malloc(sizeof(int)*l);
  44. memset(arr, 0, sizeof(int)*l);
  45. memset(arr2, 0, sizeof(int)*l);
  46. while(apom > 0){
  47. scanf("%d %c\n", &pos, &dir);
  48. if(dir == 'L')
  49. arr[pos] = 1;
  50. else
  51. arr[pos] = 2;
  52. arrpos[a-apom] = pos;
  53. apom--;
  54. }
  55. /*pole pripraveno na vypocet*/
  56. /*nejdrive zleva*/
  57. for(j=0;j < a; j++){
  58. i = arrpos[j];
  59. if(arr[i] == 2){
  60. best1 = l-i;
  61. li1 = i;
  62. pomc1 = l-i;
  63. break;
  64. }
  65. }
  66.  
  67.  
  68. /*jeste zprava*/
  69. for(j=a-1;j >= 0; j--){
  70. i = arrpos[j];
  71. if(arr[i] == 1){
  72. best2 = i;
  73. li2 = i;
  74. pomc2 = i;
  75. break;
  76. }
  77. }
  78. pomr = -1;
  79. prohozeno = 1;
  80. /*simulace indexu*/
  81. if(li1 >= 0 && li2 >= 0){
  82. while(prohozeno == 1){
  83. prohozeno = 0;
  84. for(j=0;j < a; j++){
  85. i = arrpos[j];
  86. if(arr[i] == 2)
  87. pomr = i;
  88. else if(arr[i] == 1 && pomr != -1){
  89. arr[pomr] = 1;
  90. arr[i] = 2;
  91. prohozeno = 1;
  92. li1 = i;
  93. li2 = pomr;
  94. arr2[i] = arr2[i] + 1;
  95. arr2[pomr] = arr2[pomr] + 1;
  96. pomr = -1;
  97. }
  98. }
  99. pomr = -1;
  100. }
  101. }
  102. if(li1 >= 0){
  103. /*neotocil se*/
  104. if(arr2[li1]%2 == 0){
  105. if(arr[li1] == 1)
  106. arr[li1] = 2;
  107. else
  108. arr[li1] = 1;
  109. }
  110. if(arr2[li1] == 2)
  111. pomc1 = l-i;
  112. else
  113. pomc1 = i;
  114.  
  115. }
  116. if(li2 >= 0){
  117. /*neotocil se*/
  118. if(arr2[li2]%2 == 0){
  119. if(arr[li2] == 1)
  120. arr[li2] = 2;
  121. else
  122. arr[li2] = 1;
  123. }
  124. if(arr2[li2] == 2)
  125. pomc2 = l-i;
  126. else
  127. pomc2 = i;
  128. }
  129. if(pomc1 == pomc2 && pomc1 != -1){
  130. if(li2 < li1){
  131. tmp = li1;
  132. li1 = li2;
  133. li2 = tmp;
  134. }
  135.  
  136. printf("The last ant will fall down in %d seconds - started at %d and %d.\n", maxi(best1, best2), li1, li2);
  137. }
  138. else
  139. printf("The last ant will fall down in %d seconds - started at %d.\n", maxi(best1, best2), maxi(li1, li2));
  140. }
  141. return 0;
  142. }
  143.  
  144.  
  145.  

Diff to submission s933

ants.c

--- c4.s933.cteam111.ants.c.0.ants.c
+++ c4.s987.cteam111.ants.c.0.ants.c
@@ -22,9 +22,10 @@
 
 int main(){
-        int l, a, apom, i, best1, best2;
+        int l, a, apom, i, j, best1, best2;
         char dir;
         int pos;
         int *arr;
         int *arr2;
+        int arrpos[100000];
         int pomr;
         int pomc1, pomc2;
@@ -49,9 +50,11 @@
                         else
                                 arr[pos] = 2;
+                        arrpos[a-apom] = pos;
                         apom--;
                 }
                 /*pole pripraveno na vypocet*/
                 /*nejdrive zleva*/
-                for(i=0;i < l; i++){
+                for(j=0;j < a; j++){
+                        i = arrpos[j];
                         if(arr[i] == 2){
                                 best1 = l-i;
@@ -64,5 +67,6 @@
 
                 /*jeste zprava*/
-                for(i=l-1;i >= 0; i--){
+                for(j=a-1;j >= 0; j--){
+                        i = arrpos[j];
                         if(arr[i] == 1){
                                 best2 = i;
@@ -78,5 +82,6 @@
                 while(prohozeno == 1){
                         prohozeno = 0;
-                        for(i=0;i < l; i++){
+                        for(j=0;j < a; j++){
+                                i = arrpos[j];
                                 if(arr[i] == 2)
                                         pomr = i;