Source code for submission s933

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