Source code for submission s1358

ants.cpp

  1. #include <iostream>
  2.  
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. class ant_info {
  9. public:
  10. int pos;
  11. char dir;
  12.  
  13. ant_info(int pos, char dir) : pos(pos), dir(dir) {}
  14.  
  15. static bool cmp(const ant_info& fst, const ant_info& snd)
  16. {
  17. return fst.pos < snd.pos;
  18. }
  19. };
  20.  
  21. int main2()
  22. {
  23. vector<ant_info> ants;
  24. int maxl;
  25. int maxr;
  26. int startl;
  27. int startr;
  28. int length;
  29. int n;
  30. int pos;
  31. int dist;
  32. char dir;
  33.  
  34. while (cin >> length >> n)
  35. {
  36. ants = vector<ant_info>();
  37. maxl = maxr = -1;
  38. startl = startr = -1;
  39. size_t i;
  40. for (i = 0; i < n; i++)
  41. {
  42. cin >> pos >> dir;
  43.  
  44. ants.push_back(ant_info(pos, dir));
  45. if (dir == 'L') {
  46. if (pos > maxl) {
  47. maxl = pos;
  48. }
  49. } else {
  50. dist = length - pos;
  51. if (dist > maxr) {
  52. maxr = dist;
  53. }
  54. }
  55. }
  56.  
  57. sort(ants.begin(), ants.end(), ant_info::cmp);
  58.  
  59. int mid = 0;
  60.  
  61. for (i = 0; i < ants.size(); i++)
  62. {
  63. bool left = ants[i].dir == 'L';
  64.  
  65. if (left) mid++;
  66. }
  67.  
  68. if (mid > 0) startl = ants[mid - 1].pos;
  69. if (mid < static_cast<int>(ants.size())) startr = ants[mid].pos;
  70.  
  71. cout << "The last ant will fall down in "
  72. << (maxl >= maxr ? maxl : maxr)
  73. << " seconds - started at ";
  74.  
  75. if (maxl == maxr) {
  76. if (startl > startr) swap(startl, startr);
  77. cout << startl << " and " << startr;
  78. } else {
  79. cout << (maxl > maxr ? startl : startr);
  80. }
  81. cout << "." << endl;
  82.  
  83. }
  84.  
  85. return 0;
  86.  
  87. }
  88.  
  89.