Source code for submission s925

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. while(remaining > 2 && pL < pR) {
  52. if(waitL == false){
  53. while(array[pL] == ' ') pL++;
  54. if(array[pL] == remL){
  55. remaining--;
  56. array[pL] = ' ';
  57. pL++;
  58. } else if(array[pL] == inv(remL)) {
  59. remL = inv(remL);
  60. if(waitR == false)
  61. waitL = true;
  62. waitR = false;
  63. }
  64. }
  65. if(waitR == false && remaining > 2){
  66. while(array[pR] == ' ') pR--;
  67. if(array[pR] == remR){
  68. remaining--;
  69. array[pR] = ' ';
  70. pR--;
  71. } else if(array[pR] == inv(remR)){
  72. remR = inv(remR);
  73. if(waitL == false)
  74. waitR = true;
  75. waitL = false;
  76. }
  77. }
  78. //for( i = 0 ; i < wood ; i++ )
  79. // printf("%c", array[i]);
  80. //printf(", rem: %c %c, p: %2d %2d, wait: %d %d, remaining: %d\n", remL, remR, pL, pR, waitL, waitR, remaining);
  81. }
  82. while(array[pL] == ' ') pL++;
  83. while(array[pR] == ' ') pR--;
  84.  
  85. distL = array[pL] == ' ' ? wood+123 : pL;
  86. distR = array[pL] == ' ' ? wood+123 : wood-pR;
  87. printf("The last ant will fall down in %d seconds - ", max);
  88. if(distL > distR || pL == pR){
  89. printf("started at %d.\n", pL);
  90. }
  91. if(distR > distL && pL != pR){
  92. printf("started at %d.\n", pR);
  93. }
  94. if(distR == distL){
  95. printf("started at %d and %d.\n", pL, pR);
  96. }
  97. }
  98.  
  99. return 0;
  100. }
  101.