Guest User

Untitled

a guest
Jan 12th, 2016
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. /*
  2. */
  3.  
  4. //#pragma comment(linker, "/STACK:16777216")
  5. #define _CRT_SECURE_NO_WARNINGS
  6. #include <fstream>
  7. #include <iostream>
  8. #include <string>
  9. #include <complex>
  10. #include <math.h>
  11. #include <set>
  12. #include <vector>
  13. #include <map>
  14. #include <queue>
  15. #include <stdio.h>
  16. #include <stack>
  17. #include <algorithm>
  18. #include <list>
  19. #include <ctime>
  20. #include <memory.h>
  21. #include <assert.h>
  22.  
  23. #define y0 sdkfaslhagaklsldk
  24. #define y1 aasdfasdfasdf
  25. #define yn askfhwqriuperikldjk
  26. #define j1 assdgsdgasghsf
  27. #define tm sdfjahlfasfh
  28. #define lr asgasgash
  29. #define prev asdgasdgajshdhfs
  30.  
  31. #define eps 1e-8
  32. //#define M_PI 3.141592653589793
  33. #define bs 1000000007
  34. #define bsize 256
  35.  
  36. const int N = 1250;
  37.  
  38. using namespace std;
  39.  
  40. int tests;
  41. int prev[3][N], nxt[3][N], dp[N][N];
  42. int board[3][N];
  43. int ts, n;
  44. string st;
  45. int ni, nj;
  46.  
  47. int main(){
  48. //freopen("route.in","r",stdin);
  49. //freopen("route.out","w",stdout);
  50. freopen("F:/in.txt","r",stdin);
  51. freopen("F:/output.txt","w",stdout);
  52. ios_base::sync_with_stdio(0);
  53. //cin.tie(0);
  54.  
  55. cin >> tests;
  56. for (; tests; --tests)
  57. {
  58. cin >> n;
  59. ++ts;
  60. for (int i = 1; i <= 2; i++)
  61. {
  62. cin >> st;
  63. for (int j = 1; j <= n; j++)
  64. {
  65. if (st[j - 1] == 'X')
  66. board[i][j] = 1;
  67. else
  68. board[i][j] = 0;
  69. }
  70. }
  71.  
  72.  
  73. // prec
  74. nxt[1][n+1] = n + 1;
  75. nxt[2][n+1] = n + 1;
  76. for (int i = n; i; --i)
  77. {
  78. for (int j = 1; j <= 2; j++)
  79. {
  80. nxt[j][i] = nxt[j][i + 1];
  81. if (board[j][i] == 1)
  82. nxt[j][i] = i;
  83. }
  84. }
  85.  
  86. for (int i = 1; i <= n; i++)
  87. {
  88. for (int j = 1; j <= 2; j++)
  89. {
  90. prev[j][i] = prev[j][i - 1];
  91. if (board[j][i] == 1)
  92. prev[j][i] = i;
  93. }
  94. }
  95.  
  96.  
  97. // dp
  98.  
  99. for (int i = 0; i <= n; i++)
  100. {
  101. for (int j = 0; j <= n; j++)
  102. {
  103. dp[i][j] = 1e9;
  104. }
  105. }
  106.  
  107. dp[0][0] = 0;
  108.  
  109. for (int i = 0; i <= n; i++)
  110. {
  111. for (int j = 0; j <= n; j++)
  112. {
  113. if (board[1][i + 1] == 1)
  114. dp[i + 1][j] = min(dp[i + 1][j], dp[i][j]);
  115. if (board[2][j + 1] == 1)
  116. dp[i][j + 1] = min(dp[i][j + 1], dp[i][j]);
  117.  
  118. //str8
  119. if (board[1][i + 1] == 0)
  120. {
  121. int ni = nxt[1][i+1] - 1;
  122. int nj = j;
  123. if (nj == i)
  124. nj++;
  125. dp[ni][nj] = min(dp[ni][nj], dp[i][j] + 1);
  126. }
  127.  
  128. if (board[2][j + 1] == 0)
  129. {
  130. int nj = nxt[2][j+1] - 1;
  131. int ni = i;
  132. if (ni == j)
  133. ni++;
  134. dp[ni][nj] = min(dp[ni][nj], dp[i][j] + 1);
  135. }
  136.  
  137. //cross
  138.  
  139. if (i >= j&&prev[2][i+1] <= j)
  140. {
  141. dp[i + 1][nxt[2][i + 1]-1] = min(dp[i + 1][nxt[2][i + 1]-1], dp[i][j] + 1);
  142. }
  143. if (j >= i&&prev[1][j + 1] <= i)
  144. {
  145. dp[nxt[1][j + 1]-1][j + 1] = min(dp[nxt[1][j + 1]-1][j + 1], dp[i][j] + 1);
  146. }
  147. }
  148. }
  149. /*
  150. for (int i = 1; i <= n; i++)
  151. {
  152. for (int j = 1; j <= n; j++)
  153. cout << dp[i][j] << " ";
  154. cout << endl;
  155. }*/
  156.  
  157. // cout << dp[12][8] << endl;
  158.  
  159. cout << "Case #" << ts << ": " << dp[n][n] << endl;
  160. }
  161.  
  162. cin.get(); cin.get();
  163. return 0;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment