Combothermal

Untitled

Aug 7th, 2019
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.53 KB | None | 0 0
  1. #pragma GCC optimize ("O3")
  2. #pragma GCC target ("sse4")
  3.  
  4. #include <bits/stdc++.h>
  5. #include <ext/pb_ds/tree_policy.hpp>
  6. #include <ext/pb_ds/assoc_container.hpp>
  7.  
  8. using namespace std;
  9. using namespace __gnu_pbds;
  10.  
  11. typedef long long ll;
  12. typedef long double ld;
  13. typedef complex<ld> cd;
  14.  
  15. typedef pair<int, int> pi;
  16. typedef pair<ll,ll> pl;
  17. typedef pair<ld,ld> pd;
  18.  
  19. typedef vector<int> vi;
  20. typedef vector<ld> vd;
  21. typedef vector<ll> vl;
  22. typedef vector<pi> vpi;
  23. typedef vector<pl> vpl;
  24. typedef vector<cd> vcd;
  25.  
  26. template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>;
  27.  
  28. #define FOR(i, a, b) for (int i=a; i<(b); i++)
  29. #define F0R(i, a) for (int i=0; i<(a); i++)
  30. #define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
  31. #define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
  32.  
  33. #define sz(x) (int)(x).size()
  34. #define mp make_pair
  35. #define pb push_back
  36. #define f first
  37. #define s second
  38. #define lb lower_bound
  39. #define ub upper_bound
  40. #define all(x) x.begin(), x.end()
  41. #define shandom_ruffle random_shuffle
  42.  
  43. const int MOD = 1000000007;
  44. const ll INF = 1e18;
  45. const int MX = 100001; //check the limits, dummy
  46.  
  47. int main() {
  48. ios_base::sync_with_stdio(0); cin.tie(0);
  49.  
  50. int T; cin >> T;
  51. F0R(i, T) {
  52. string S; cin >> S;
  53. ll X = 0, Y = 0;
  54. ll hX = 0, hY = 0, lX = 0, lY = 0;
  55. F0R(i, sz(S)) {
  56. if (S[i] == 'W') {
  57. X++;
  58. } else if (S[i] == 'A') {
  59. Y--;
  60. } else if (S[i] == 'S') {
  61. X--;
  62. } else Y++;
  63. hX = max(hX, X);
  64. hY = max(hY, Y);
  65. lX = min(lX, X);
  66. lY = min(lY, Y);
  67. }
  68.  
  69. ll ans = (hX-lX+1)*(hY-lY+1);
  70.  
  71. if (hX != 0) {
  72. X = 0, Y = 0;
  73. bool used = false;
  74. ll chX = 0, chY = 0, clX = 0, clY = 0;
  75. F0R(i, sz(S)) {
  76. if (S[i] == 'W') {
  77. X++;
  78. } else if (S[i] == 'A') {
  79. Y--;
  80. } else if (S[i] == 'S') {
  81. X--;
  82. } else Y++;
  83. if (!used && X == hX) {
  84. X-= 2; used = true;
  85. chX = max(chX, X);
  86. chY = max(chY, Y);
  87. clX = min(clX, X);
  88. clY = min(clY, Y);
  89. X++;
  90. }
  91. chX = max(chX, X);
  92. chY = max(chY, Y);
  93. clX = min(clX, X);
  94. clY = min(clY, Y);
  95. }
  96. ans = min(ans, (chX-clX+1)*(chY-clY+1));
  97. }
  98.  
  99. if (hY != 0) {
  100. X = 0, Y = 0;
  101. bool used = false;
  102. ll chX = 0, chY = 0, clX = 0, clY = 0;
  103. F0R(i, sz(S)) {
  104. if (S[i] == 'W') {
  105. X++;
  106. } else if (S[i] == 'A') {
  107. Y--;
  108. } else if (S[i] == 'S') {
  109. X--;
  110. } else Y++;
  111. if (!used && Y == hY) {
  112. Y-=2; used = true;
  113. chX = max(chX, X);
  114. chY = max(chY, Y);
  115. clX = min(clX, X);
  116. clY = min(clY, Y);
  117. Y++;
  118. }
  119. chX = max(chX, X);
  120. chY = max(chY, Y);
  121. clX = min(clX, X);
  122. clY = min(clY, Y);
  123. }
  124. ans = min(ans, (chX-clX+1)*(chY-clY+1));
  125. }
  126.  
  127. if (lX != 0) {
  128. X = 0, Y = 0;
  129. bool used = false;
  130. ll chX = 0, chY = 0, clX = 0, clY = 0;
  131. F0R(i, sz(S)) {
  132. if (S[i] == 'W') {
  133. X++;
  134. } else if (S[i] == 'A') {
  135. Y--;
  136. } else if (S[i] == 'S') {
  137. X--;
  138. } else Y++;
  139. if (!used && X == lX) {
  140. X+=2; used = true;
  141. chX = max(chX, X);
  142. chY = max(chY, Y);
  143. clX = min(clX, X);
  144. clY = min(clY, Y);
  145. X--;
  146. }
  147. chX = max(chX, X);
  148. chY = max(chY, Y);
  149. clX = min(clX, X);
  150. clY = min(clY, Y);
  151. }
  152. ans = min(ans, (chX-clX+1)*(chY-clY+1));
  153. }
  154.  
  155. if (lY != 0) {
  156. X = 0, Y = 0;
  157. bool used = false;
  158. ll chX = 0, chY = 0, clX = 0, clY = 0;
  159. F0R(i, sz(S)) {
  160. if (S[i] == 'W') {
  161. X++;
  162. } else if (S[i] == 'A') {
  163. Y--;
  164. } else if (S[i] == 'S') {
  165. X--;
  166. } else Y++;
  167. if (!used && Y == lY) {
  168. Y+=2; used = true;
  169. chX = max(chX, X);
  170. chY = max(chY, Y);
  171. clX = min(clX, X);
  172. clY = min(clY, Y);
  173. Y--;
  174. }
  175. chX = max(chX, X);
  176. chY = max(chY, Y);
  177. clX = min(clX, X);
  178. clY = min(clY, Y);
  179. }
  180. ans = min(ans, (chX-clX+1)*(chY-clY+1));
  181. //cout << chX << " " << clX << " " << chY << " " << clY << endl;
  182. }
  183.  
  184. cout << ans << endl;
  185. }
  186.  
  187. return 0;
  188. }
  189.  
  190. // read the question correctly (ll vs int)
  191. // template by bqi343
  192. // license: https://github.com/bqi343/USACO/blob/master/LICENSE
Advertisement
Add Comment
Please, Sign In to add comment