Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cmath>
- #include <algorithm>
- #include <cstdio>
- #include <cstdlib>
- #include <iomanip>
- #include <vector>
- #include <set>
- #include <map>
- #include <queue>
- #include <stack>
- #include <deque>
- #include <string>
- #include <bitset>
- #include <cstring>
- #include <ctime>
- #define pb push_back
- #define pp pop_back
- #define f first
- #define s second
- #define mp make_pair
- #define sz(a) (int)(a.size())
- #define fname "knight."
- typedef long long ll;
- typedef unsigned long long ull;
- const int N = (int)1e5 + 123;
- const int inf = (int)1e9 + 123;
- const ll infl = (ll)1e18 + 123;
- const double eps = 1e-6;
- using namespace std;
- int n, m;
- bool dp[(1 << 25)][25];
- int moves[8][2] = {-1, -2, -2, -1, -2, 1, -1, 2, 1, -2, 2, -1, 2, 1, 1, 2};
- pair < int, int > to[25];
- void solve () {
- cin >> n >> m;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- to[i * m + j] = mp(i, j);
- for (int i = 0; i < n * m; i++)
- dp[(1 << i)][i] = 1;
- for (int mask = 1; mask < (1 << (n * m)); mask++) {
- for (int i = 0; i < n * m; i++) {
- if (!dp[mask][i])
- continue;
- pair < int, int > now = to[i];
- for (int j = 0; j < 8; j++) {
- pair < int, int > nw = mp(now.f + moves[j][0], now.s + moves[j][1]);
- if (nw.f >= 0 && nw.f < n && nw.s >= 0 && nw.s < m) {
- int id = nw.f * m + nw.s;
- if (mask & (1 << id))
- continue;
- dp[(mask | (1 << id))][id] = 1;
- }
- }
- }
- }
- for (int i = 0; i < n * m; i++)
- if (dp[(1 << (n * m)) - 1][i]) {
- cout << '1';
- return;
- }
- cout << '0';
- return;
- }
- int main() {
- freopen(fname"in", "r", stdin);
- freopen(fname"out", "w", stdout);
- int t;
- cin >> t;
- for (int test = 1; test <= t; ++ test) {
- printf ("Scenario #%d:\n", test);
- solve ();
- puts ("");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement