Source code for submission s1237

ants.cpp

  1. #include <stdio.h>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iostream>
  5.  
  6.  
  7. #define LENGTH 100100
  8.  
  9. using namespace std;
  10.  
  11. struct Ant {
  12. int pos;
  13. bool dir;
  14. };
  15.  
  16.  
  17. bool myCompare(const Ant &a, const Ant &b){
  18. return a.pos < b.pos;
  19. }
  20.  
  21.  
  22. int main ( void )
  23. {
  24. int len, ants;
  25. int i, min, max;
  26. char tmp;
  27. int left, right;
  28.  
  29. while ( scanf ( "%d %d ", &len, &ants ) == 2 )
  30. {
  31. vector<Ant> mravenci(ants);
  32. int pos;
  33.  
  34. max = -1;
  35. min = LENGTH * 2;
  36. left = right = 0;
  37.  
  38. for ( i = 0; i < ants; i++ )
  39. {
  40. scanf ( "%d %c ", &pos, &tmp );
  41. mravenci[i].pos = pos;
  42. if ( tmp == 'R' )
  43. {
  44. mravenci[i].dir = true;
  45. right++;
  46. }
  47. else
  48. {
  49. mravenci[i].dir = false;
  50. left++;
  51. }
  52. }
  53.  
  54.  
  55. sort ( mravenci.begin(), mravenci.end(), myCompare );
  56.  
  57. for ( i = 0; i < ants; i++ )
  58. {
  59. //cout << mravenci[i].pos << " " << mravenci[i].dir << endl;
  60. if ( mravenci[i].dir )
  61. {
  62. min = i;
  63. break;
  64. }
  65. }
  66. for ( i = ants - 1; i >= 0; i-- )
  67. {
  68. if ( !mravenci[i].dir )
  69. {
  70. max = i;
  71. break;
  72. }
  73. }
  74. //cout << "max " << max << " min " << min << endl;
  75.  
  76. if ( max == -1 )
  77. {
  78. printf ( "The last ant will fall down in %d seconds - started at %d.\n", len - mravenci[min].pos, mravenci[min].pos);
  79. continue;
  80. }
  81. if ( min > LENGTH + 2 )
  82. {
  83. printf ( "The last ant will fall down in %d seconds - started at %d.\n", mravenci[max].pos, mravenci[max].pos);
  84. continue;
  85. }
  86.  
  87. if ( len - mravenci[min].pos == mravenci[max].pos )
  88. {
  89. int m1, m2;
  90. if(mravenci[min + left].pos > mravenci[max - right].pos){
  91. m1 = mravenci[max - right].pos;
  92. m2 = mravenci[min + left].pos;
  93. }
  94. else{
  95. m2 = mravenci[max - right].pos;
  96. m1 = mravenci[min + left].pos;
  97. }
  98. printf ( "The last ant will fall down in %d seconds - started at %d and %d.\n", mravenci[max].pos,
  99. m1, m2 );
  100. }
  101. else if(len - mravenci[min].pos > mravenci[max].pos){
  102. printf ( "The last ant will fall down in %d seconds - started at %d.\n", len - mravenci[min].pos, mravenci[min + left].pos);
  103. }
  104. else{
  105. printf ( "The last ant will fall down in %d seconds - started at %d.\n", mravenci[max].pos, mravenci[max - right].pos);
  106. }
  107. }
  108. return 0;
  109. }
  110.