fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. template<class A, class B> bool maximize(A& x, B y) {if (x < y) return x = y, true; else return false;}
  6. template<class A, class B> bool minimize(A& x, B y) {if (x > y) return x = y, true; else return false;}
  7.  
  8. #define all(a) a.begin(), a.end()
  9. #define pb push_back
  10. #define pf push_front
  11. #define fi first
  12. #define se second
  13. #define int long long
  14.  
  15. typedef long long ll;
  16. typedef unsigned long long ull;
  17. typedef double db;
  18. typedef long double ld;
  19. typedef pair<db, db> pdb;
  20. typedef pair<ld, ld> pld;
  21. typedef pair<int, int> pii;
  22. typedef pair<ll, ll> pll;
  23. typedef pair<ll, int> plli;
  24. typedef pair<int, ll> pill;
  25.  
  26. const int MAX_N = 2e5 + 5;
  27.  
  28. int numPoint, numEvent, numQ;
  29. pii a[MAX_N];
  30. pair<string, int> event[MAX_N];
  31. pair<pii, int> q[MAX_N];
  32. pii ans[MAX_N];
  33. bool cntFlipX, cntFlipY;
  34. int valFlipX, valFlipY;
  35.  
  36. void addFlipX(const int& K) {
  37. cntFlipX ^= 1;
  38. valFlipX = (K << 1) - valFlipX;
  39. }
  40.  
  41. void addFlipY(const int& K) {
  42. cntFlipY ^= 1;
  43. valFlipY = (K << 1) - valFlipY;
  44. }
  45.  
  46. signed main() {
  47. ios_base::sync_with_stdio(false);
  48. cin.tie(nullptr);
  49.  
  50. cin >> numPoint >> numEvent >> numQ;
  51. for (int i = 1; i <= numPoint; i++) {
  52. cin >> a[i].fi >> a[i].se;
  53. }
  54. for (int i = 1; i <= numEvent; i++) {
  55. cin >> event[i].fi;
  56. if (event[i].fi[0] != 'c') {
  57. cin >> event[i].se;
  58. }
  59. }
  60. for (int i = 1; i <= numQ; i++) {
  61. cin >> q[i].fi.se >> q[i].fi.fi; // b a
  62. q[i].se = i;
  63. }
  64.  
  65. sort(q + 1, q + numQ + 1);
  66.  
  67. int j = 1, spinTurn = 0;
  68. for (int i = 1; i <= numQ; i++) {
  69. while (j <= q[i].fi.fi) {
  70. if (event[j].fi[0] == 'c') {
  71. if (event[j].fi[1] == 'w') {
  72. spinTurn++;
  73. if (spinTurn == 4) spinTurn = 0;
  74. }
  75. else {
  76. spinTurn--;
  77. if (spinTurn < 0) spinTurn = 3;
  78. }
  79.  
  80. j++;
  81. continue;
  82. }
  83.  
  84. int k = event[j].se;
  85.  
  86. if (event[j].fi[0] == 'x') {
  87. if (spinTurn & 1) {
  88. addFlipY(k * (spinTurn > 1 ? -1 : 1));
  89. }
  90. else {
  91. addFlipX(k * (spinTurn > 1 ? -1 : 1));
  92. }
  93. }
  94. else {
  95. if (spinTurn & 1) {
  96. addFlipX(k * (spinTurn == 1 ? -1 : 1));
  97. }
  98. else {
  99. addFlipY(k * (spinTurn == 2 ? -1 : 1));
  100. }
  101. }
  102. j++;
  103. }
  104.  
  105. pii curr = a[q[i].fi.se];
  106. curr.fi = valFlipX + (cntFlipX ? -1 : 1) * curr.fi;
  107. curr.se = valFlipY + (cntFlipY ? -1 : 1) * curr.se;
  108. for (int time = 1; time <= spinTurn; time++) {
  109. curr = {curr.se, -curr.fi};
  110. }
  111. ans[q[i].se] = curr;
  112. }
  113.  
  114. for (int i = 1; i <= numQ; i++) {
  115. cout << ans[i].fi << ' ' << ans[i].se << '\n';
  116. }
  117.  
  118. return 0;
  119. }
  120.  
  121. /*
  122.  
  123.  
  124. Monday, 08 April 2024
  125. 21:59:01
  126. by Asamai
  127. */
Success #stdin #stdout 0.01s 13764KB
stdin
Standard input is empty
stdout
Standard output is empty