Source code for submission s1223

Go to diff to previous submission

ants.cpp

  1. //
  2. // File: ants.cc
  3. // Author: cteam053
  4. //
  5. // Created on October 27, 2012, 1:06 PM
  6. //
  7.  
  8. #include <stdlib.h>
  9. #include <cstdio>
  10. #include <cmath>
  11. #include <climits>
  12. #include <iostream>
  13.  
  14. using namespace std;
  15.  
  16. int rightAr[100000];
  17. int leftAr[100000];
  18. char ants[100000];
  19. int lCnt = 0;
  20. int rCnt = 0;
  21. int L, A;
  22. int pos;
  23. int maxVal;
  24. int minVal;
  25. int minCnt;
  26. int minAnts[100000];
  27. int r, l;
  28. bool cross;
  29. int dist[100000];
  30. int distFromMid[100000];
  31. int minDist;
  32. int minMidDist;
  33. int resCnt;
  34. int result[10];
  35.  
  36. int main(int argc, char** argv) {
  37.  
  38. char c, space;
  39. int len;
  40. int tmp;
  41. while(scanf("%d%d", &L, &A) == 2){
  42. lCnt = 0;
  43. rCnt = 0;
  44. minVal = INT_MAX;
  45. maxVal = -1;
  46. r = 0;
  47. l = 0;
  48. minMidDist = INT_MAX;
  49. minDist = INT_MAX;
  50. cross = false;
  51. for(int i = 0; i < L; i++){
  52. ants[i] = 'A';
  53. rightAr[i] = 0;
  54. leftAr[i] = 0;
  55. }
  56. for(int i = 0; i < A; i++){
  57. scanf("%d%c%c", &pos, &space, &c);
  58. if(c == 'R'){
  59. len = L - pos;
  60. } else {
  61. len = pos;
  62. }
  63. dist[pos] = len;
  64. distFromMid[pos] = abs(L / 2 - pos);
  65. maxVal = (maxVal < len) ? len : maxVal;
  66. ants[pos] = c;
  67. }
  68. for(int i = 0; i < L; i++){
  69. if(ants[i] == 'R'){
  70. if(i < L - 1)
  71. rightAr[i+1] = ++rCnt;
  72. }
  73. }
  74. for(int i = L -1; i > 0; i--){
  75. if(ants[i] == 'L'){
  76. leftAr[i-1] = ++lCnt;
  77. }
  78. }
  79.  
  80. for(int i = 0; i < L; i++){
  81. if(rightAr[i] < r){
  82. rightAr[i] = r;
  83. } else if(rightAr[i] > r){
  84. r = rightAr[i];
  85. }
  86. }
  87. for(int i = L -1; i >= 0; i--){
  88. if(leftAr[i] < l){
  89. leftAr[i] = l;
  90. } else if(leftAr[i] > l){
  91. l = leftAr[i];
  92. }
  93. }
  94. for(int i = 0; i < L; i++){
  95. if(rightAr[i] > 0 && leftAr[i] > 0){
  96. cross = true;
  97. break;
  98. }
  99. }
  100. if(cross){
  101. for(int i = 0; i < L; i++){
  102. if(ants[i] != 'A'){
  103. tmp = abs(rightAr[i] - leftAr[i]);
  104. if(tmp < minVal){
  105. minVal = tmp;
  106. minCnt = 0;
  107. minAnts[minCnt++] = i;
  108. } else if(tmp == minVal){
  109. minAnts[minCnt++] = i;
  110. }
  111. }
  112. }
  113. for(int i = 0; i < minCnt; i++){
  114. if(distFromMid[minAnts[i]] < minMidDist){
  115. minMidDist = distFromMid[minAnts[i]];
  116. minDist = dist[minAnts[i]];
  117. } else if(distFromMid[minAnts[i]] == minMidDist){
  118. if(dist[minAnts[i]] < minDist){
  119. minDist = dist[minAnts[i]];
  120. }
  121. }
  122. }
  123. resCnt = 0;
  124. for(int i = 0; i < minCnt; i++){
  125. if(minMidDist == distFromMid[minAnts[i]]){
  126. if(minDist == dist[minAnts[i]]){
  127. result[resCnt++] = minAnts[i];
  128. }
  129. }
  130. }
  131. printf("The last ant will fall down in %d seconds - started at ", maxVal);
  132. for(int i = 0; i < resCnt; i++){
  133. printf("%d", result[i]);
  134. if(i == resCnt - 1){
  135. printf(".\n");
  136. } else {
  137. printf(" and ");
  138. }
  139. }
  140. } else {
  141. bool first = true;
  142. printf("The last ant will fall down in %d seconds - started at ", maxVal);
  143. for(int i = 0; i < L; i++){
  144. if(dist[i] == maxVal){
  145. if(first){
  146. first = false;
  147. printf("%d", i);
  148. } else {
  149. printf(" and %d", i);
  150. break;
  151. }
  152. }
  153. }
  154. printf(".\n");
  155. }
  156. }
  157.  
  158. return (0);
  159. }
  160.  
  161.  

Diff to submission s1182

ants.cpp

--- c4.s1182.cteam053.ants.cpp.0.ants.cpp
+++ c4.s1223.cteam053.ants.cpp.0.ants.cpp
@@ -139,10 +139,18 @@
             }
         } else {
+            bool first = true;
+            printf("The last ant will fall down in %d  seconds - started at ", maxVal);
             for(int i = 0; i < L; i++){
                 if(dist[i] == maxVal){
-                    printf("The last ant will fall down in %d  seconds - started at %d.\n", maxVal, i);
-                    break;
+                    if(first){
+                        first = false;
+                        printf("%d", i);
+                    } else {
+                        printf(" and %d", i);
+                        break;
+                    }
                 }
             }
+            printf(".\n");
         }
     }