Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <cstdio>
  6. #include <cstdlib>
  7. #include <iomanip>
  8. #include <vector>
  9. #include <set>
  10. #include <map>
  11. #include <queue>
  12. #include <stack>
  13. #include <deque>
  14. #include <string>
  15. #include <bitset>
  16. #include <cstring>
  17. #include <ctime>
  18. #define pb push_back
  19. #define pp pop_back
  20. #define f first
  21. #define s second
  22. #define mp make_pair
  23. #define sz(a) (int)(a.size())
  24. #define fname "knight."
  25. typedef long long ll;
  26. typedef unsigned long long ull;
  27. const int N = (int)1e5 + 123;
  28. const int inf = (int)1e9 + 123;
  29. const ll infl = (ll)1e18 + 123;
  30. const double eps = 1e-6;
  31.  
  32. using namespace std;
  33.  
  34. int n, m;
  35. bool dp[(1 << 25)][25];
  36. int moves[8][2] = {-1, -2, -2, -1, -2, 1, -1, 2, 1, -2, 2, -1, 2, 1, 1, 2};
  37. pair < int, int > to[25];
  38.  
  39. void solve () {
  40. cin >> n >> m;
  41. for (int i = 0; i < n; i++)
  42. for (int j = 0; j < m; j++)
  43. to[i * m + j] = mp(i, j);
  44. for (int i = 0; i < n * m; i++)
  45. dp[(1 << i)][i] = 1;
  46. for (int mask = 1; mask < (1 << (n * m)); mask++) {
  47. for (int i = 0; i < n * m; i++) {
  48. if (!dp[mask][i])
  49. continue;
  50. pair < int, int > now = to[i];
  51. for (int j = 0; j < 8; j++) {
  52. pair < int, int > nw = mp(now.f + moves[j][0], now.s + moves[j][1]);
  53. if (nw.f >= 0 && nw.f < n && nw.s >= 0 && nw.s < m) {
  54. int id = nw.f * m + nw.s;
  55. if (mask & (1 << id))
  56. continue;
  57. dp[(mask | (1 << id))][id] = 1;
  58. }
  59. }
  60. }
  61. }
  62. for (int i = 0; i < n * m; i++)
  63. if (dp[(1 << (n * m)) - 1][i]) {
  64. cout << '1';
  65. return;
  66. }
  67. cout << '0';
  68. return;
  69. }
  70.  
  71. int main() {
  72. freopen(fname"in", "r", stdin);
  73. freopen(fname"out", "w", stdout);
  74. int t;
  75. cin >> t;
  76. for (int test = 1; test <= t; ++ test) {
  77. printf ("Scenario #%d:\n", test);
  78. solve ();
  79. puts ("");
  80. }
  81. return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement