Source code for submission s681

ants.cpp

  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. struct TAnt {
  7. int begin;
  8. int index;
  9. char smer;
  10. bool dead;
  11. int time;
  12. };
  13.  
  14. int main( void ) {
  15. TAnt * Ants;
  16. int number, size, alive, last, prelast;
  17.  
  18. last = prelast = 0;
  19. while ( cin >> size >> number ) {
  20. alive = number;
  21. Ants = new TAnt [number];
  22. for ( int i = 0; i < number; i++ ) {
  23. cin >> Ants [i] . index;
  24. Ants [i] . begin = Ants [i] . index;
  25. cin >> Ants [i] . smer;
  26. if ( ( Ants [i] . index == 0 && Ants [i] . smer == 'L' ) || ( Ants [i] . index == ( size - 1 ) && Ants [i] . smer == 'R' ) )
  27. Ants [i] . dead = true;
  28. else
  29. Ants [i] . dead = false;
  30.  
  31. Ants [i] . time = 0;
  32. }
  33.  
  34. if ( number == 1 )
  35. {
  36. if ( Ants [0] . index == 0 && Ants [0] . smer == 'L')
  37. {
  38. alive = 0;
  39. last = 0;
  40. }
  41.  
  42. if ( Ants [0] . index == ( size - 1 ) && Ants [0] . smer == 'R' )
  43. {
  44. alive = 0;
  45. last = 0;
  46. }
  47. }
  48.  
  49. while ( alive ) {
  50. for ( int i = 0; i < number; i++ ) {
  51.  
  52.  
  53. if ( Ants [i] . dead )
  54. {
  55. continue;
  56. }
  57.  
  58. if ( ( Ants [i] . index < 0 ) || ( Ants [i] . index >= size ) )
  59. {
  60. Ants [i] . dead = true;
  61. if ( alive == number ) {
  62. last = prelast = i;
  63. }
  64. else {
  65. prelast = last;
  66. last = i;
  67. }
  68.  
  69. alive--;
  70. continue;
  71. }
  72.  
  73. if ( Ants [i] . smer == 'R' )
  74. Ants [i] . index = Ants [i] . index + 1;
  75. else
  76. Ants [i] . index = Ants [i] . index - 1;
  77.  
  78. Ants [i] . time++;
  79.  
  80. for ( int j = 0; j < number; j++ ) {
  81. if ( Ants [j] . dead )
  82. continue;
  83.  
  84. if ( Ants [i] . index == Ants [j] . index ) {
  85. if ( Ants [i] . smer == 'L' ) {
  86. Ants [i] . smer = 'R';
  87. Ants [j] . smer = 'L';
  88. }
  89. else {
  90. Ants [i] . smer = 'L';
  91. Ants [j] . smer = 'R';
  92. }
  93. }
  94. }
  95. }
  96. }
  97.  
  98. if ( prelast == last ) {
  99. cout << "The last ant will fall down in " << Ants [last] . time << " seconds - started at " << Ants [last] . begin << "." << endl;
  100. }
  101. else {
  102. cout << "The last ant will fall down in " << Ants [last] . time << " seconds - started at ";
  103. if ( Ants [last] . begin < Ants [prelast] . begin )
  104. cout << Ants [last] . begin << " and " << Ants [prelast] . begin << "." << endl;
  105. else
  106. cout << Ants [prelast] . begin << " and " << Ants [last] . begin << "." << endl;
  107. }
  108. }
  109.  
  110. return ( 0 );
  111. }