Advertisement
Underdogs

Untitled

Feb 17th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.04 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int,string> ii;
  7.  
  8. #define N 55
  9. #define M 21
  10. #define INF 10000007
  11. #define PI acos(-1)
  12. #define rep(i,a,b) for(int i = a; i < b; i++)
  13. #define reps(i,a,b) for(int i = a; i >= b; i--)
  14. #define sc scanf
  15. #define pc printf
  16. #define pb push_back
  17. #define F first
  18. #define S second
  19.  
  20. string fir,sec;
  21. int a,b;
  22. pair<int,string>dp[N][N][10];
  23.  
  24. //0 for '(' started
  25. //1 for ')' ended
  26. //2 for '{' started
  27. //3 for '}' ended
  28. //4 for '[' started
  29. //5 for ']' ended
  30. //6 for nothing has happened till now
  31. pair<int,string>go(int p,int q,int is)
  32. {
  33. if(p == a && q == b){
  34. if(is == 0) return ii(0,")");
  35. else if(is == 2) return ii(0,"}");
  36. else if(is == 4) return ii(0,"]");
  37. else if(is == 1 || is == 3 || is == 5 || is == 6) return ii(0,"");
  38. }
  39. if(p == a){
  40. string now = "";
  41. if(is == 0) now = ")[";
  42. else if(is == 2) now = "}[";
  43. else if(is == 6) now = "[";
  44. for(int j = q; j < b; j++){
  45. now += sec[j];
  46. }
  47. now += "]";
  48. return ii(b-q,now);
  49. }
  50. if(q == b){
  51. string now = "";
  52. if(is == 0) now = "){";
  53. else if(is == 4) now = "]{";
  54. else if(is == 6) now = "{";
  55. for(int j = p; j < a; j++){
  56. now += fir[j];
  57. }
  58. now += "}";
  59. return ii(a-p,now);
  60. }
  61.  
  62. pair<int,string> &ret = dp[p][q][is];
  63. if(ret.F != -1) return ret;
  64.  
  65. ret.F = INF;
  66. ret.S = "";
  67.  
  68. pair<int,string>dup;
  69. string now;
  70. if(fir[p] == sec[q]){
  71. dup = go(p+1,q+1,0);
  72. if(dup.F + 1 < ret.F){
  73. ret.F = dup.F + 1;
  74. if(is == 0){
  75. now = "";now += fir[p];
  76. ret.S = now + dup.S;
  77. }
  78. else if(is == 1){
  79. now = "(";
  80. now += fir[p];
  81. ret.S = now + dup.S;
  82. }
  83. else if(is == 2){
  84. now = "}(";now += fir[p];
  85. ret.S = now + dup.S;
  86. }
  87. else if(is == 3){
  88. now = "(";now += fir[p];
  89. ret.S = now + dup.S;
  90. }
  91. else if(is == 4){
  92. now = "](";now += fir[p];
  93. ret.S = now + dup.S;
  94. }
  95. else if(is == 5){
  96. now = "(";now += fir[p];
  97. ret.S = now + dup.S;
  98. }
  99. else if(is == 6){
  100. now = "(";
  101. now += fir[p];
  102. ret.S = now + dup.S;
  103. }
  104.  
  105. }
  106. }
  107.  
  108. dup = go(p+1,q,2);
  109. if(dup.F + 1 < ret.F){
  110. ret.F = dup.F + 1;
  111. if(is == 0){
  112. now = "){";
  113. now += fir[p];
  114. ret.S = now + dup.S;
  115. }
  116. else if(is == 1){
  117. now = "{";
  118. now += fir[p];
  119. ret.S = now + dup.S;
  120. }
  121. else if(is == 2){
  122. now = "";
  123. now += fir[p];
  124. ret.S = now + dup.S;
  125. }
  126. else if(is == 3){
  127. now = "{";
  128. now += fir[p];
  129. ret.S = now + dup.S;
  130. }
  131. else if(is == 4){
  132. now = "]{";
  133. now += fir[p];
  134. ret.S = now + dup.S;
  135. }
  136. else if(is == 5){
  137. now = "{";
  138. now += fir[p];
  139. ret.S = now + dup.S;
  140. }
  141. else if(is == 6){
  142. now = "{";
  143. now += fir[p];
  144. ret.S = now + dup.S;
  145. }
  146. }
  147. dup = go(p,q+1,4);
  148. if(dup.F + 1 < ret.F){
  149. ret.F = dup.F + 1;
  150. if(is == 0){
  151. now = ")[";
  152. now += sec[q];
  153. ret.S = now + dup.S;
  154. }
  155. else if(is == 1){
  156. now = "[";
  157. now += sec[q];
  158. ret.S = now + dup.S;
  159. }
  160. else if(is == 2){
  161. now = "}[";
  162. now += sec[q];
  163. ret.S = now + dup.S;
  164. }
  165. else if(is == 3){
  166. now = "[";
  167. now += sec[q];
  168. ret.S = now + dup.S;
  169. }
  170. else if(is == 4){
  171. now = "";
  172. now += sec[q];
  173. ret.S = now + dup.S;
  174. }
  175. else if(is == 5){
  176. now = "[";
  177. now += sec[q];
  178. ret.S = now + dup.S;
  179. }
  180. else if(is == 6){
  181. now = "[";
  182. now += sec[q];
  183. ret.S = now + dup.S;
  184. }
  185. }
  186.  
  187. return ret;
  188.  
  189. }
  190.  
  191. int main()
  192. {
  193. int tt = 0;
  194. int T;
  195. sc("%d",T);
  196. while(++tt <= T){
  197. for(int i = 0; i < 55; i++){
  198. for(int j = 0; j < 55; j++){
  199. for(int k = 0;k < 10; k++){
  200. dp[i][j][k].F = -1;
  201. dp[i][j][k].S = "";
  202. }
  203. }
  204. }
  205.  
  206. cin >> fir >> sec;
  207.  
  208. a = fir.size();
  209. b = sec.size();
  210.  
  211. pair<int,string>ans = go(0,0,6);
  212. pc("Case %d:\n",tt);
  213. cout << ans.F << "\n" << ans.S << endl;
  214. }
  215.  
  216.  
  217.  
  218.  
  219. return 0;
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement