p12356.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include <algorithm>
  2. #include <array>
  3. #include <climits>
  4. #include <iostream>
  5. #include <iomanip>
  6. #include <list>
  7. #include <map>
  8. #include <set>
  9. #include <sstream>
  10. #include <string>
  11. #include <utility>
  12. #include <vector>
  13. #include <queue>
  14. #define rep(i, a, b) for(int i = (a); i < int(b); ++i)
  15. #define repto(i, b) rep(i, 0, b)
  16. #define trav(it, v) for(typeof((v).begin()) it = (v).begin(); \
  17. it != (v).end(); ++it)
  18. using namespace std;
  19. typedef unsigned int nat;
  20. class Warrior
  21. {
  22. public:
  23. Warrior() : left{this-1}, right{this+1} {}
  24. Warrior *left;
  25. Warrior *right;
  26. string id;
  27. };
  28. int main()
  29. {
  30. nat num_soldiers, num_bombs;
  31. Warrior sentinel;
  32. sentinel.id = "*";
  33. while(true)
  34. {
  35. cin >> num_soldiers >> num_bombs;
  36. if(!num_soldiers)
  37. break;
  38. vector<Warrior> front_line(num_soldiers);
  39. repto(i, num_soldiers)
  40. {
  41. front_line[i].id = to_string(i+1);
  42. }
  43. front_line.front().left = &sentinel;
  44. front_line.back().right = &sentinel;
  45. repto(i, num_bombs)
  46. {
  47. nat l, r;
  48. cin >> l >> r;
  49. front_line[l-1].left->right = front_line[r-1].right;
  50. front_line[r-1].right->left = front_line[l-1].left;
  51. cout << front_line[l-1].left->id << " " << front_line[r-1].right->id << endl;
  52. }
  53. cout << "-" << endl;
  54. }
  55. return 0;
  56. }