Advertisement
Malinovsky239

Untitled

Mar 29th, 2011
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <string>
  4. #include <cstring>
  5. #include <algorithm>
  6.  
  7. #define N 255
  8.  
  9. using namespace std;
  10.  
  11. string table[N][N], v = "23456789TJQKA", mast = "CDHS", cards_free[N];
  12. bool used[N][N], full[N][N];
  13. int num, x, x2, y, y2, cnt[N];
  14.  
  15. bool square(int x, int y)
  16. {
  17.     memset(cnt, 0, sizeof(cnt));   
  18.  
  19.     for (int i = x; i <= x + 2; i++)
  20.         for (int j = y; j <= y + 2; j++)
  21.         {
  22.             cnt[ table[i][j][0] ]++;
  23.             cnt[ table[i][j][1] ]++;
  24.         }
  25.    
  26.     bool ok = true;
  27.     for (int j = 0; j < v.size(); j++)
  28.         if (cnt[ v[j] ] > 1) ok = false;
  29.  
  30.     if (ok) return true;
  31.  
  32.     int a[4];
  33.     for (int j = 0; j < mast.size(); j++)
  34.         a[j] = cnt[ mast[j] ];
  35.     sort(a, a + 4);
  36.                    
  37.     return (a[2] == 0);
  38. }
  39.  
  40. bool intersect(int r1, int c1, int r2, int c2)
  41. {
  42.     memset(full, 0, sizeof(full));
  43.  
  44.     for (int i = r1; i <= r1 + 2; i++)
  45.         for (int j = c1; j <= c1 + 2; j++)
  46.             full[i][j] = true;
  47.  
  48.     for (int i = r2; i <= r2 + 2; i++)
  49.         for (int j = c2; j <= c2 + 2; j++)
  50.             if (full[i][j])
  51.                 return true;
  52.  
  53.     return false;
  54. }
  55.  
  56. int main()
  57. {
  58.     int n, m;
  59.     cin >> n >> m;
  60.     for (int i = 1; i <= n; i++)
  61.         for (int j = 1; j <= m; j++)
  62.         {
  63.             cin >> table[i][j];
  64.             if (table[i][j] != "J1" && table[i][j] != "J2")
  65.                 used[ table[i][j][0] ][ table[i][j][1] ] = true;
  66.             else
  67.             {
  68.                 if (table[i][j] == "J1")
  69.                     x = i, y = j;
  70.                 else
  71.                     x2 = i, y2 = j;
  72.             }
  73.         }
  74.  
  75.     for (int i = 0; i < v.size(); i++)
  76.         for (int j = 0; j < mast.size(); j++)
  77.             if (!used[ v[i] ][ mast[j] ])
  78.                 cards_free[num] += v[i], cards_free[num++] += mast[j];         
  79.  
  80.     for (int i = 0; i < num; i++)
  81.         for (int j = 0; j < num; j++)
  82.             if (i != j)
  83.             {
  84.                 if (x)
  85.                     table[x][y] = cards_free[i];
  86.                 if (x2)
  87.                     table[x2][y2] = cards_free[j];
  88.  
  89.                 for (int r1 = 1; r1 + 2 <= n; r1++)
  90.                     for (int c1 = 1; c1 + 2 <= m; c1++)
  91.                         for (int r2 = 1; r2 + 2 <= n; r2++)
  92.                             for (int c2 = 1; c2 + 2 <= m; c2++)
  93.                             {                              
  94.                                 if (!intersect(r1, c1, r2, c2))
  95.                                 {
  96.                                     if (square(r1, c1) && square(r2, c2))
  97.                                     {
  98.                                         cout << "Solution exists.\n";
  99.                                         if (!x && !x2) cout << "There are no jokers.";
  100.                                         if (x && x2) cout << "Replace J1 with " << cards_free[i] << " and J2 with " << cards_free[j] << ".";
  101.                                         if (x && !x2) cout << "Replace J1 with " << cards_free[i] << ".";
  102.                                         if (!x && x2) cout << "Replace J2 with " << cards_free[j] << ".";
  103.                                         cout << "\n";
  104.                                         printf("Put the first square to (%d, %d).\n", r1, c1);
  105.                                         printf("Put the second square to (%d, %d).\n", r2, c2);
  106.                                         return 0;
  107.                                     }  
  108.                                 }
  109.                             }              
  110.             }
  111.  
  112.     cout << "No solution.";
  113.    
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement