Go to diff to previous submission
#include <stdio.h> #include <algorithm> #define debug(format,...) fprintf(stderr, format, __VA_ARGS__) class Ant; bool operator< (const Ant&, const Ant &); class Ant { public: bool left; int id; int time; friend bool operator< (const Ant&, const Ant &); /* bool operator<= (const Ant &ant) { return this->id <= ant.id; }*/ void reverse(Ant *ant) { std::swap<int>(this->time, ant->time); this->left = !this->left; ant->left = !ant->left; } bool compare(Ant *ant) { if(!this->left && ant->left) { this->reverse(ant); return true; } return false; } }; bool operator< (const Ant &ant1, const Ant &ant2) { return ant1.id < ant2.id; } int main() { Ant ant[100000]; int ants, pos, len, i, j; int maxTime=-1, maxAnt1=-1, maxAnt2=-1; char dir[3]; while(scanf("%d %d", &len, &ants)>0) { for(i=0; i<ants; i++) { scanf("%d %s", &pos, dir); ant[i].id = pos; ant[i].left = (dir[0]=='L'); ant[i].time = (ant[i].left ? pos : len-pos); } std::sort(ant+0, ant+ants); for(i=0; i<ants-1; i++) { j=i; while(ant[j].compare(ant+j+1) && j>0) { if(j==0) { break; } j--; } } maxTime = maxAnt2 = -1; for(i=0; i<ants; i++) { if(ant[i].time == maxTime) { maxAnt2 = ant[i].id; }else if (ant[i].time > maxTime) { maxAnt1 = ant[i].id; maxAnt2 = -1; maxTime = ant[i].time; } } if (maxAnt2 == -1) { printf( "The last ant will fall down in %d seconds - started at %d.\n", maxTime, maxAnt1); }else { printf( "The last ant will fall down in %d seconds - started at %d and %d.\n", maxTime, maxAnt1, maxAnt2); } } return 0; }
--- c4.s816.cteam102.ants.cpp.0.ants.cpp +++ c4.s823.cteam102.ants.cpp.0.ants.cpp @@ -36,5 +36,5 @@ int main() { Ant ant[100000]; - int ants, pos, len, i; + int ants, pos, len, i, j; int maxTime=-1, maxAnt1=-1, maxAnt2=-1; char dir[3]; @@ -45,22 +45,13 @@ ant[i].left = (dir[0]=='L'); ant[i].time = (ant[i].left ? pos : len-pos); - if(maxTime==ant[i].time) { - maxAnt2=pos; - }else if (maxTime<ant[i].time) { - maxTime = ant[i].time; - maxAnt1=pos; - maxAnt2=-1; - } } std::sort(ant+0, ant+ants); - for(i=0; i<ants-1;) { - if(ant[i].compare(ant+i+1) && i>0) { - if(i>0) { - i--; - } else { - i++; + for(i=0; i<ants-1; i++) { + j=i; + while(ant[j].compare(ant+j+1) && j>0) { + if(j==0) { + break; } - }else { - i++; + j--; } }