Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int n, m, s;
- char a[20][20][3], suita[] = {'2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'};
- char suitb[] = {'C', 'D', 'H', 'S'}, x[2], y[2];
- bool seen[1000];
- struct Poz
- {
- int lin, col;
- } joker1, joker2, sq[100000], c1, c2, c3, c4;
- unordered_map < string, bool > check;
- bool Verif(int lin, int col)
- {
- int i, j;
- int ok = 1;
- for(i = lin ; i <= lin + 2 && ok == 1 ; i++)
- for(j = col ; j <= col + 2 && ok == 1 ; j++)
- if(a[lin][col][1] != a[i][j][1])
- ok = 0;
- if(ok == 1)
- return true;
- for(i = lin ; i <= lin + 2 ; i++)
- for(j = col ; j <= col + 2 ; j++)
- if(seen[ a[i][j][0] ]==1)
- return false;
- else
- seen[ a[i][j][0] ] = 1;
- return true;
- }
- int main()
- {
- int i, j, i1, j1, i2, j2;
- cin >> n >> m;
- for(i = 1 ; i <= n ; i++)
- for(j = 1 ; j <= m ; j++)
- {
- cin >> a[i][j];
- if(a[i][j][0] == 'J')
- {
- if(joker1.lin == 0)
- joker1 = {i, j};
- else
- joker2 = {i, j};
- }
- else
- check[ a[i][j] ] = 1;
- }
- if(joker1.lin == 0)
- {
- for(i = 1 ; i <= n - 2 ; i++)
- for(j = 1 ; j <= m - 2 ; j++)
- {
- memset(seen, 0, sizeof(seen));
- if(Verif(i, j) == true)
- sq[++s] = {i, j};
- }
- for(i = 1 ; i < s ; i++)
- for(j = i + 1 ; j <= s ; j++)
- {
- if(abs(sq[j].lin - sq[i].lin) >= 2 || abs(sq[j].col - sq[i].col) >= 2)
- {
- cout << "Solution exists." << '\n';
- cout << "There are no jokers." << '\n';
- cout << "Put the first square to (" << sq[i].lin << ", " << sq[i].col << ")." << '\n';
- cout << "Put the second square to (" << sq[j].lin << ", " << sq[j].col << ")." << '\n';
- return 0;
- }
- }
- cout << "No solution.";
- return 0;
- }
- if(joker2.lin == 0)
- {
- int sz = strlen(suita), sz2 = 4;
- for(i = 0 ; i < sz ; i++)
- {
- for(j = 0 ; j < sz2 ; j++)
- {
- x[0] = suita[i];
- x[1] = suitb[j];
- if(check[x] == 0)
- {
- strcpy(a[joker1.lin][joker1.col], x);
- s = 0;
- for(i1 = 1 ; i1 <= n - 2 ; i1++)
- for(j1 = 1 ; j1 <= m - 2 ; j1++)
- {
- memset(seen, 0, sizeof(seen));
- if(Verif(i1, j1) == true)
- sq[++s] = {i1, j1};
- }
- for(i1 = 1 ; i1 < s ; i1++)
- for(j1 = i1 + 1 ; j1 <= s ; j1++)
- {
- if(abs(sq[j1].lin - sq[i1].lin) >= 2 || abs(sq[j1].col - sq[i1].col) >= 2)
- {
- cout << "Solution exists." << '\n';
- cout << "Replace J1 with " << x << '.' << '\n';
- cout << "Put the first square to (" << sq[i1].lin << ", " << sq[i1].col << ")." << '\n';
- cout << "Put the second square to (" << sq[j1].lin << ", " << sq[j1].col << ")." << '\n';
- return 0;
- }
- }
- }
- }
- }
- cout << "No solution";
- return 0;
- }
- int sz = strlen(suita), sz2 = 4;
- for(i = 0 ; i < sz ; i++)
- {
- for(j = 0 ; j < sz2 ; j++)
- {
- x[0] = suita[i];
- x[1] = suitb[j];
- if(check[x] == 0)
- {
- check[x] = 1;
- strcpy(a[joker1.lin][joker1.col], x);
- for(i2 = 0 ; i2 < sz ; i2++)
- for(j2 = 0 ; j2 < sz2 ; j2++)
- {
- y[0] = suita[i2];
- y[1] = suitb[j2];
- if(check[y] == 0)
- {
- s = 0;
- strcpy(a[joker2.lin][joker2.col], y);
- for(i1 = 1 ; i1 <= n - 2 ; i1++)
- for(j1 = 1 ; j1 <= m - 2 ; j1++)
- {
- memset(seen, 0, sizeof(seen));
- if(Verif(i1, j1) == true)
- sq[++s] = {i1, j1};
- }
- for(i1 = 1 ; i1 < s ; i1++)
- for(j1 = i1 + 1 ; j1 <= s ; j1++)
- {
- if(abs(sq[j1].lin - sq[i1].lin) >= 2 || abs(sq[j1].col - sq[i1].col) >= 2)
- {
- cout << "Solution exists." << '\n';
- cout << "Replace J1 with " << x[0] << x[1];
- cout << " and J2 with " << y[0] << y[1] << '.' << '\n';
- cout << "Put the first square to (" << sq[i1].lin << ", " << sq[i1].col << ")." << '\n';
- cout << "Put the second square to (" << sq[j1].lin << ", " << sq[j1].col << ")." << '\n';
- return 0;
- }
- }
- }
- }
- check[x] = 0;
- }
- }
- }
- cout << "No solution";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement