Guest User

Untitled

a guest
May 22nd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.35 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int tetr[30][30], tetr1[30][30];
  6. bool used[30][30];
  7. int n, m, res3 = 0, res = 1;
  8. int a, b, c;
  9. int max1 = 0, max2 = 0, max3 = 0;
  10.  
  11. void buble(int tetr[30][30]){
  12.     for (int l = 1; l <= n - 2; l++){
  13.         for (int k = 1; k <= m; k++){
  14.             if (tetr[l][k] == tetr[l + 1][k] && tetr[l + 1][k] == tetr[l + 2][k] && tetr[l + 1][k] != 0){
  15.                 if (used[l][k] == 0){used[l][k] = 1; res++;}
  16.                 if (used[l + 1][k] == 0){used[l + 1][k] = 1; res++;}
  17.                 if (used[l + 2][k] == 0){used[l + 2][k] = 1; res++;}
  18.             }
  19.         }
  20.     }
  21. }
  22.  
  23. void buuble(int tetr[30][30]){
  24.     for (int l = 1; l <= n; l++){
  25.         for (int k = 1; k <= m - 2; k++){
  26.             if (tetr[l][k] == tetr[l][k + 1] && tetr[l][k + 1] == tetr[l][k + 2] && tetr[l][k + 2] != 0){
  27.                 if (used[l][k] == 0){used[l][k] = 1; res++;}
  28.                 if (used[l][k + 1] == 0){used[l][k + 1] = 1; res++;}
  29.                 if (used[l][k + 2] == 0){used[l][k + 2] = 1; res++;}
  30.             }
  31.         }
  32.     }
  33. }
  34.  
  35. void buuuble(int tetr[30][30]){
  36.     for (int l = 3; l <= n - 2; l++){
  37.         for (int k = 1; k <= m - 2; k++){
  38.             if (tetr[l][k] == tetr[l + 1][k + 1] && tetr[l + 1][k + 1] == tetr[l + 2][k + 2] && tetr[l + 2][k + 2] != 0){
  39.                 if (used[l][k] == 0){used[l][k] = 1; res++;}
  40.                 if (used[l + 1][k + 1] == 0){used[l + 1][k + 1] = 1; res++;}
  41.                 if (used[l + 2][k + 2] == 0){used[l + 2][k + 2] = 1; res++;}
  42.             }
  43.             if (tetr[l][k] == tetr[l - 1][k + 1] && tetr[l - 1][k + 1] == tetr[l - 2][k + 2] && tetr[l - 2][k + 2] != 0){
  44.                 if (used[l][k] == 0){used[l][k] = 1; res++;}
  45.                 if (used[l - 1][k + 1] == 0){used[l - 1][k + 1] = 1; res++;}
  46.                 if (used[l - 2][k + 2] == 0){used[l - 2][k + 2] = 1; res++;}
  47.             }
  48.         }
  49.     }
  50. }
  51.  
  52. void delet(int tetr[30][30]){
  53.      for (int u = 1; u <= m; u++)
  54.                 for (int y = 1; y <= n; y++)
  55.                     for (int l = n; l > 1; l--)
  56.                         if (tetr[l][u] == 0)
  57.                             for (int k = l - 1; k >= 1; k--){
  58.                                 tetr[k + 1][u] = tetr[k][u];
  59.                                 tetr[k][u] = 0;
  60.                             }
  61.             for (int l = 1; l <= n; l++)
  62.                 for (int k = 1; k <= m; k++)
  63.                     if (used[l][k] == 1) used[l][k] = 0;
  64. }
  65.  
  66. int main(){
  67.     cin >> n >> m;
  68.     for (int i = 1; i <= n; i++)
  69.         for (int j = 1; j <= m; j++){
  70.             cin >> tetr[i][j];
  71.             tetr1[i][j] = tetr[i][j];
  72.         }
  73.     cin >> a >> b >> c;
  74.     //1
  75.     for (int i = 1; i <= m; i++){
  76.         for (int l = 1; l <= n; l++)
  77.                 for (int k = 1; k <= m; k++)
  78.                     tetr[l][k] = tetr1[l][k];
  79.         for (int j = n; j >= 1; j--){
  80.             if ((tetr[j][i] == 0)){
  81.                     tetr[j][i] = c;
  82.                     tetr[j - 1][i] = b;
  83.                     tetr[j - 2][i] = a;
  84.                     break;
  85.             }
  86.         }
  87.         res3 = 0;
  88.         res = 1;
  89.         while (res != 0){
  90.             res = 0;
  91.             buble(tetr);
  92.             buuble(tetr);
  93.             buuuble(tetr);
  94.             res3 += res;
  95.             for (int l = 1; l <= n; l++)
  96.                 for (int k = 1; k <= m; k++)
  97.                     if (used[l][k] == 1) tetr[l][k] = 0;
  98.             delet(tetr);
  99.         }
  100.         if (res3 > max3){
  101.             max3 = res3;
  102.             max1 = i - 1;
  103.         }
  104.         if (res3 == max3)
  105.             if (i - 1 < max1) max1 = i - 1;
  106.     }
  107.     //2
  108.     for (int i = 1; i <= m; i++){
  109.         for (int l = 1; l <= n; l++)
  110.                 for (int k = 1; k <= m; k++)
  111.                     tetr[l][k] = tetr1[l][k];
  112.         for (int j = n; j >= 1; j--){
  113.             if ((tetr[j][i] == 0)){
  114.                     tetr[j][i] = a;
  115.                     tetr[j - 1][i] = c;
  116.                     tetr[j - 2][i] = b;
  117.                     break;
  118.             }
  119.         }
  120.         res3 = 0;
  121.         res = 1;
  122.         while (res != 0){
  123.             res = 0;
  124.             buble(tetr);
  125.             buuble(tetr);
  126.             buuuble(tetr);
  127.             res3 += res;
  128.             for (int l = 1; l <= n; l++)
  129.                 for (int k = 1; k <= m; k++)
  130.                     if (used[l][k] == 1) tetr[l][k] = 0;
  131.             delet(tetr);
  132.         }
  133.         if (res3 > max3){
  134.             max3 = res3;
  135.             max1 = i - 1;
  136.             max2 = 1;
  137.         }
  138.         if (res3 == max3)
  139.             if (i - 1 < max1){
  140.                 max1 = i - 1;
  141.                 max2 = 1;
  142.             }
  143.     }
  144.    
  145.     //3
  146.     for (int i = 1; i <= m; i++){
  147.         for (int l = 1; l <= n; l++)
  148.                 for (int k = 1; k <= m; k++)
  149.                     tetr[l][k] = tetr1[l][k];
  150.         for (int j = n; j >= 1; j--){
  151.             if ((tetr[j][i] == 0)){
  152.                     tetr[j][i] = b;
  153.                     tetr[j - 1][i] = a;
  154.                     tetr[j - 2][i] = c;
  155.                     break;
  156.                 }
  157.         }
  158.         res3 = 0;
  159.         res = 1;
  160.         while (res != 0){
  161.             res = 0;
  162.             buble(tetr);
  163.             buuble(tetr);
  164.             buuuble(tetr);
  165.             res3 += res;
  166.             for (int l = 1; l <= n; l++)
  167.                 for (int k = 1; k <= m; k++)
  168.                     if (used[l][k] == 1) tetr[l][k] = 0;
  169.             delet(tetr);
  170.         }
  171.         if (res3 > max3){
  172.             max3 = res3;
  173.             max1 = i - 1;
  174.             max2 = 2;
  175.         }
  176.         if (res3 == max3)
  177.             if (i - 1 < max1){
  178.                 max1 = i - 1;
  179.                 max2 = 2;
  180.             }
  181.     }
  182.    
  183.     cout << max1 << " " << max2 << " " << max3;
  184. }
Add Comment
Please, Sign In to add comment