Advertisement
Guest User

Untitled

a guest
Apr 21st, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <deque>
  5.  
  6. int sn, hm;
  7. int ans = 0;
  8.  
  9. struct Pair {
  10. int first, second;
  11. };
  12.  
  13. std::deque<Pair> queries;
  14. std::vector<int> prefix_function;
  15.  
  16. bool get (int first, int second, int& counter) {
  17. if (second == sn || first == sn) {
  18. return false;
  19. }
  20. counter++;
  21. if (first > sn) {
  22. std::cout << "t " << first - sn << " ";
  23. } else {
  24. std::cout << "s " << first + 1 << " ";
  25. }
  26. if (second > sn) {
  27. std::cout << "t " << second - sn << "\n";
  28. } else {
  29. std::cout << "s " << second + 1 << "\n";
  30. }
  31. fflush(stdout);
  32. std::string verdict;
  33. std::cin >> verdict;
  34. if (verdict.size() == 2) {
  35. return false;
  36. }
  37. return true;
  38. }
  39.  
  40. void query (int& counter) {
  41. auto it = queries.front();
  42. queries.pop_front();
  43. int ind = it.first;
  44. int cur = prefix_function[it.second];
  45. if (get (ind, cur, counter)) {
  46. prefix_function[ind] = cur + 1;
  47. return;
  48. }
  49. if (cur == 0) {
  50. prefix_function[ind] = cur;
  51. return;
  52. }
  53. cur--;
  54. queries.push_front({ind, cur});
  55. }
  56.  
  57. int main() {
  58. std::cin >> sn >> hm;
  59. prefix_function.resize(sn + 1 + hm);
  60. for (int i = 1; i < sn; i++) {
  61. queries.push_back({i, i - 1});
  62. }
  63. for (int i = 0; i < hm; i++) {
  64. if (i < sn - 1) {
  65. queries.push_back({sn + 1 + i, sn + i});
  66. for (int iter_counter = 0; iter_counter < 5 && queries.size(); ) {
  67. query(iter_counter);
  68. }
  69. std::cout << "$ 0\n";
  70. fflush(stdout);
  71. } else {
  72. auto cur = queries.size();
  73. queries.push_front({sn + 1 + i, sn + i});
  74. int iter_counter = 0;
  75. query(iter_counter);
  76. if (queries.size() != cur) {
  77. auto it = queries.front();
  78. queries.pop_front();
  79. queries.push_front(it);
  80. } else {
  81. if (prefix_function[sn + i + 1] == sn) {
  82. ans++;
  83. }
  84. }
  85. while (iter_counter < 5 && queries.size()) {
  86. query(iter_counter);
  87. }
  88. std::cout << "$ " << ans << "\n";
  89. fflush(stdout);
  90. }
  91. }
  92. // for (auto x : prefix_function) std::cout << x << " ";
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement