Go to diff to previous submission
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; struct anti{ char Dir; int Pos; int StartPos; }; void changeDir( char & dir){ if (dir == 'R') dir = 'L'; else if (dir == 'L') dir = 'R'; } int main (){ int i,Size, Time=0, Num, LP=0, stepped; bool felt=false; cin >> Size >> Num; anti * Ants = new anti [Size]; for (i=0;i<Num;i++){ cin >> Ants[i].Pos >> Ants[i].Dir; Ants[i].StartPos = Ants[i].Pos; } for (i=0;i<Num;i++){ for (int j = 0;j<Num-1-i;j++){ if (Ants[j].Pos>Ants[j+1].Pos){ swap (Ants[j].Pos,Ants[j+1].Pos); swap (Ants[j].Dir,Ants[j+1].Dir); swap (Ants[j].StartPos,Ants[j+1].StartPos); } } } stepped = -1; while (1){ if (LP == Num-1){ if (Ants[LP].Dir=='L') Time +=Ants[LP].Pos; else Time+= (Size -Ants[LP].Pos); cout << "The last ant will fall down in "<< Time << " seconds - started at " << Ants[LP].StartPos<<"."<<endl; return 0; } if (Ants[LP].Pos==0 && Ants[LP].Dir=='L') { LP++; felt=true;} if (Ants[Num-1].Pos==Size && Ants[Num-1].Dir=='R') { if (felt == true && Num == (LP+1) ){ cout << "The last ant will fall down in "<< Time << " seconds - started at " << Ants[LP-1].StartPos<<" and "<<Ants[Num-1].StartPos<< "."<<endl; return 0; } Num--; } felt = false; for (i=LP; i<Num; i++){ 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'; Ants[i].Pos--; Ants[i+1].Pos++; stepped = i+1; continue; } else if ((i+1) < Num && Ants[i].Pos == (Ants[i+1].Pos-1) && Ants[i].Dir == 'R' && Ants[i+1].Dir == 'L'){ Ants[i].Dir = 'L'; Ants[i+1].Dir = 'R'; stepped = i+1; continue; } else if(i != stepped){ if (Ants[i].Dir == 'R') Ants[i].Pos++; if (Ants[i].Dir == 'L') Ants[i].Pos--; stepped = -1; } } //----------------------------------------------------------------------------- Time++; } return 0; }
--- 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';