Source code for submission s1042

Go to diff to previous submission

ants.c

  1. #include <stdio.h>
  2. #include <string.h>
  3. #define false 0
  4. #define true 1
  5.  
  6. char inv(char c){
  7. return c=='L' ? 'R' : 'L';
  8. }
  9. int main( int agrc, char * argv[] ) {
  10. char array[100002],c, remL, remR;
  11. int i, wood=10, ants, coo, remaining, pL, pR, timeL, timeR;
  12. int waitL, waitR;
  13. int distL, distR;
  14. int max=-1, len;
  15. while( scanf("%d %d", &wood, &ants ) != EOF ) {
  16. waitL = false;
  17. waitR = false;
  18. pL = wood;
  19. pR = 0;
  20. max = -1;
  21. memset(array, ' ', wood+1);
  22. for( i = 0 ; i < ants ; i++ ) {
  23. scanf("%d %c", &coo, &c );
  24. array[coo] = c;
  25. if(coo > pR) pR = coo;
  26. if(coo < pL) pL = coo;
  27. }
  28. remaining = ants;
  29. remL = 'L';
  30. remR = 'R';
  31. timeL = 0;
  32. timeR = wood;
  33. len = 0;
  34. while(timeL < wood) {
  35. if(array[timeL] == 'R'){
  36. max = wood-len;
  37. break;
  38. }
  39. timeL++;
  40. len++;
  41. }
  42. len = 0;
  43. while(timeR >= 0) {
  44. if(array[timeR] == 'L'){
  45. if(wood-len>max) max = wood-len;
  46. break;
  47. }
  48. timeR--;
  49. len++;
  50. }
  51. distL = -1;
  52. distR = -1;
  53. while(remaining && pL <= pR) {
  54. if(waitL == false){
  55. while(array[pL] == ' ') pL++;
  56. if(array[pL] == remL){
  57. remaining--;
  58. array[pL] = ' ';
  59. distL = pL;
  60. pL++;
  61. } else if(array[pL] == inv(remL)) {
  62. remL = inv(remL);
  63. if(waitR == false)
  64. waitL = true;
  65. waitR = false;
  66. }
  67. }
  68. if(waitR == false && remaining){
  69. while(array[pR] == ' ') pR--;
  70. if(array[pR] == remR){
  71. remaining--;
  72. array[pR] = ' ';
  73. distR = pR;
  74. pR--;
  75. } else if(array[pR] == inv(remR)){
  76. remR = inv(remR);
  77. if(waitL == false)
  78. waitR = true;
  79. waitL = false;
  80. }
  81. }
  82. /*for( i = 0 ; i < wood ; i++ )
  83. printf("%c", array[i]);
  84. printf(", rem: %c %c, p: %2d %2d, wait: %d %d, remaining: %d\n", remL, remR, pL, pR, waitL, waitR, remaining);*/
  85. }
  86. while(array[pL] == ' ') pL++;
  87. while(array[pR] == ' ') pR--;
  88.  
  89. /*printf("%d and %d\n", distL, distR);
  90. distL = array[pL] == ' ' ? wood+123 : pL;
  91. distR = array[pL] == ' ' ? wood+123 : wood-pR;*/
  92. printf("The last ant will fall down in %d seconds - ", max);
  93. if(distR > -1 && distL > -1 && (distL == wood-distR)){
  94. printf("started at %d and %d.\n", distL, distR);
  95. } else if(distR > -1 && (distL < wood-distR)){
  96. printf("started at %d.\n", distR);
  97. } else {
  98. printf("started at %d.\n", distL);
  99. }
  100. }
  101.  
  102. return 0;
  103. }
  104.  

Diff to submission s925

ants.c

--- c4.s925.cteam043.ants.c.0.ants.c
+++ c4.s1042.cteam043.ants.c.0.ants.c
@@ -49,10 +49,13 @@
                         len++;  
                 }
-                while(remaining > 2 && pL < pR) {
+                distL = -1;
+                distR = -1;
+                while(remaining && pL <= pR) {
                         if(waitL == false){
                                 while(array[pL] == ' ') pL++;
                                 if(array[pL] == remL){
                                         remaining--;
-                                        array[pL] = ' ';        
+                                        array[pL] = ' ';
+                                        distL = pL;
                                         pL++;           
                                 } else if(array[pL] == inv(remL)) {
@@ -63,9 +66,10 @@
                                 }
                         }
-                        if(waitR == false && remaining > 2){
+                        if(waitR == false && remaining){
                                 while(array[pR] == ' ') pR--;
                                 if(array[pR] == remR){
                                         remaining--;
                                         array[pR] = ' ';
+                                        distR = pR;
                                         pR--;
                                 } else if(array[pR] == inv(remR)){
@@ -76,22 +80,21 @@
                                 }
                         }
-                        //for( i = 0 ; i < wood ; i++ )
-                        //      printf("%c", array[i]);
-                        //printf(",  rem: %c %c,    p: %2d %2d,  wait: %d %d,  remaining: %d\n", remL, remR, pL, pR, waitL, waitR, remaining);
+                        /*for( i = 0 ; i < wood ; i++ )
+                                printf("%c", array[i]);
+                        printf(",  rem: %c %c,    p: %2d %2d,  wait: %d %d,  remaining: %d\n", remL, remR, pL, pR, waitL, waitR, remaining);*/
                 }
                 while(array[pL] == ' ') pL++;
                 while(array[pR] == ' ') pR--;
-
+                                
+                /*printf("%d and %d\n", distL, distR);
                 distL = array[pL] == ' ' ? wood+123 : pL;
-                distR = array[pL] == ' ' ? wood+123 : wood-pR;
+                distR = array[pL] == ' ' ? wood+123 : wood-pR;*/
                 printf("The last ant will fall down in %d seconds - ", max);
-                if(distL > distR || pL == pR){
-                        printf("started at %d.\n", pL);         
-                }
-                if(distR > distL && pL != pR){
-                        printf("started at %d.\n", pR);         
-                }
-                if(distR == distL){
-                        printf("started at %d and %d.\n", pL, pR);              
+                if(distR > -1 && distL > -1 && (distL == wood-distR)){
+                        printf("started at %d and %d.\n", distL, distR);                
+                } else if(distR > -1 && (distL < wood-distR)){
+                        printf("started at %d.\n", distR);      
+                } else {
+                        printf("started at %d.\n", distL);              
                 }
         }