Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- #include <string>
- #include <cstring>
- #include <algorithm>
- #define N 255
- using namespace std;
- string table[N][N], v = "23456789TJQKA", mast = "CDHS", cards_free[N];
- bool used[N][N], full[N][N];
- int num, x, x2, y, y2, cnt[N];
- bool square(int x, int y)
- {
- memset(cnt, 0, sizeof(cnt));
- for (int i = x; i <= x + 2; i++)
- for (int j = y; j <= y + 2; j++)
- {
- cnt[ table[i][j][0] ]++;
- cnt[ table[i][j][1] ]++;
- }
- bool ok = true;
- for (int j = 0; j < v.size(); j++)
- if (cnt[ v[j] ] > 1) ok = false;
- if (ok) return true;
- int a[4];
- for (int j = 0; j < mast.size(); j++)
- a[j] = cnt[ mast[j] ];
- sort(a, a + 4);
- return (a[2] == 0);
- }
- bool intersect(int r1, int c1, int r2, int c2)
- {
- memset(full, 0, sizeof(full));
- for (int i = r1; i <= r1 + 2; i++)
- for (int j = c1; j <= c1 + 2; j++)
- full[i][j] = true;
- for (int i = r2; i <= r2 + 2; i++)
- for (int j = c2; j <= c2 + 2; j++)
- if (full[i][j])
- return true;
- return false;
- }
- int main()
- {
- int n, m;
- cin >> n >> m;
- for (int i = 1; i <= n; i++)
- for (int j = 1; j <= m; j++)
- {
- cin >> table[i][j];
- if (table[i][j] != "J1" && table[i][j] != "J2")
- used[ table[i][j][0] ][ table[i][j][1] ] = true;
- else
- {
- if (table[i][j] == "J1")
- x = i, y = j;
- else
- x2 = i, y2 = j;
- }
- }
- for (int i = 0; i < v.size(); i++)
- for (int j = 0; j < mast.size(); j++)
- if (!used[ v[i] ][ mast[j] ])
- cards_free[num] += v[i], cards_free[num++] += mast[j];
- for (int i = 0; i < num; i++)
- for (int j = 0; j < num; j++)
- if (i != j)
- {
- if (x)
- table[x][y] = cards_free[i];
- if (x2)
- table[x2][y2] = cards_free[j];
- for (int r1 = 1; r1 + 2 <= n; r1++)
- for (int c1 = 1; c1 + 2 <= m; c1++)
- for (int r2 = 1; r2 + 2 <= n; r2++)
- for (int c2 = 1; c2 + 2 <= m; c2++)
- {
- if (!intersect(r1, c1, r2, c2))
- {
- if (square(r1, c1) && square(r2, c2))
- {
- cout << "Solution exists.\n";
- if (!x && !x2) cout << "There are no jokers.";
- if (x && x2) cout << "Replace J1 with " << cards_free[i] << " and J2 with " << cards_free[j] << ".";
- if (x && !x2) cout << "Replace J1 with " << cards_free[i] << ".";
- if (!x && x2) cout << "Replace J2 with " << cards_free[j] << ".";
- cout << "\n";
- printf("Put the first square to (%d, %d).\n", r1, c1);
- printf("Put the second square to (%d, %d).\n", r2, c2);
- return 0;
- }
- }
- }
- }
- cout << "No solution.";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement