Source code for submission s1180

Go to diff to previous submission

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.  
  44. stepped = -1;
  45. while (1){
  46. if (LP == Num-1){
  47. if (Ants[LP].Dir=='L') Time +=Ants[LP].Pos;
  48. else Time+= (Size -Ants[LP].Pos);
  49. cout << "The last ant will fall down in "<< Time << " seconds - started at " << Ants[LP].StartPos<<"."<<endl;
  50. return 0;
  51. }
  52.  
  53. if (Ants[LP].Pos==0 && Ants[LP].Dir=='L') { LP++; felt=true;}
  54. if (Ants[Num-1].Pos==Size && Ants[Num-1].Dir=='R') {
  55. if (felt == true && Num == (LP+1) ){
  56. cout << "The last ant will fall down in "<< Time << " seconds - started at " << Ants[LP-1].StartPos<<" and "<<Ants[Num-1].StartPos<< "."<<endl;
  57. return 0;
  58. }
  59. Num--;
  60. }
  61. felt = false;
  62.  
  63.  
  64. for (i=LP; i<Num; i++){
  65. if ((i+1) < Num && Ants[i].Pos == Ants[i+1].Pos && Ants[i].Dir == 'R' &&
  66. Ants[i+1].Dir == 'L'){
  67. Ants[i].Dir = 'L';
  68. Ants[i+1].Dir = 'R';
  69. Ants[i].Pos--;
  70. Ants[i+1].Pos++;
  71. stepped = i+1;
  72. continue;
  73. }
  74. else if ((i+1) < Num && Ants[i].Pos == (Ants[i+1].Pos-1) && Ants[i].Dir == 'R'
  75. && Ants[i+1].Dir == 'L'){
  76. Ants[i].Dir = 'L';
  77. Ants[i+1].Dir = 'R';
  78. stepped = i+1;
  79. continue;
  80. }
  81. else if(i != stepped){
  82. if (Ants[i].Dir == 'R') Ants[i].Pos++;
  83. if (Ants[i].Dir == 'L') Ants[i].Pos--;
  84. stepped = -1;
  85. }
  86. }
  87. //-----------------------------------------------------------------------------
  88.  
  89. Time++;
  90. }
  91.  
  92.  
  93. return 0;
  94. }
  95.  

Diff to submission s1013

ants.cpp

--- c4.s1013.cteam063.ants.cpp.0.ants.cpp
+++ c4.s1180.cteam063.ants.cpp.0.ants.cpp
@@ -41,4 +41,5 @@
         }
 
+        
         stepped = -1;
         while (1){
@@ -62,5 +63,6 @@
 
                 for (i=LP; i<Num; i++){
-                        if ((i+1) < Num && Ants[i].Pos == Ants[i+1].Pos){
+                        if ((i+1) < Num && Ants[i].Pos == Ants[i+1].Pos && Ants[i].Dir == 'R' && 
+                                                        Ants[i+1].Dir == 'L'){
                                 Ants[i].Dir = 'L';
                                 Ants[i+1].Dir = 'R';