Source code for submission s1013

ants.cpp

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstdio>
  4.  
  5. using namespace std;
  6.  
  7. struct anti{
  8. char Dir;
  9. int Pos;
  10. int StartPos;
  11. };
  12.  
  13. void changeDir( char & dir){
  14. if (dir == 'R') dir = 'L';
  15. else if (dir == 'L') dir = 'R';
  16. }
  17.  
  18.  
  19. int main (){
  20.  
  21. int i,Size, Time=0, Num, LP=0, stepped;
  22.  
  23. bool felt=false;
  24.  
  25. cin >> Size >> Num;
  26. anti * Ants = new anti [Size];
  27.  
  28. for (i=0;i<Num;i++){
  29. cin >> Ants[i].Pos >> Ants[i].Dir;
  30. Ants[i].StartPos = Ants[i].Pos;
  31. }
  32.  
  33. for (i=0;i<Num;i++){
  34. for (int j = 0;j<Num-1-i;j++){
  35. if (Ants[j].Pos>Ants[j+1].Pos){
  36. swap (Ants[j].Pos,Ants[j+1].Pos);
  37. swap (Ants[j].Dir,Ants[j+1].Dir);
  38. swap (Ants[j].StartPos,Ants[j+1].StartPos);
  39. }
  40. }
  41. }
  42.  
  43. stepped = -1;
  44. while (1){
  45. if (LP == Num-1){
  46. if (Ants[LP].Dir=='L') Time +=Ants[LP].Pos;
  47. else Time+= (Size -Ants[LP].Pos);
  48. cout << "The last ant will fall down in "<< Time << " seconds - started at " << Ants[LP].StartPos<<"."<<endl;
  49. return 0;
  50. }
  51.  
  52. if (Ants[LP].Pos==0 && Ants[LP].Dir=='L') { LP++; felt=true;}
  53. if (Ants[Num-1].Pos==Size && Ants[Num-1].Dir=='R') {
  54. if (felt == true && Num == (LP+1) ){
  55. cout << "The last ant will fall down in "<< Time << " seconds - started at " << Ants[LP-1].StartPos<<" and "<<Ants[Num-1].StartPos<< "."<<endl;
  56. return 0;
  57. }
  58. Num--;
  59. }
  60. felt = false;
  61.  
  62.  
  63. for (i=LP; i<Num; i++){
  64. if ((i+1) < Num && Ants[i].Pos == Ants[i+1].Pos){
  65. Ants[i].Dir = 'L';
  66. Ants[i+1].Dir = 'R';
  67. Ants[i].Pos--;
  68. Ants[i+1].Pos++;
  69. stepped = i+1;
  70. continue;
  71. }
  72. else if ((i+1) < Num && Ants[i].Pos == (Ants[i+1].Pos-1) && Ants[i].Dir == 'R'
  73. && Ants[i+1].Dir == 'L'){
  74. Ants[i].Dir = 'L';
  75. Ants[i+1].Dir = 'R';
  76. stepped = i+1;
  77. continue;
  78. }
  79. else if(i != stepped){
  80. if (Ants[i].Dir == 'R') Ants[i].Pos++;
  81. if (Ants[i].Dir == 'L') Ants[i].Pos--;
  82. stepped = -1;
  83. }
  84. }
  85. //-----------------------------------------------------------------------------
  86.  
  87. Time++;
  88. }
  89.  
  90.  
  91. return 0;
  92. }
  93.