Guest User

Untitled

a guest
May 23rd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.85 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstdlib>
  5. #include<cstring>
  6. using namespace std;
  7.  
  8. int n, m;
  9. int field[300][300];
  10. int cur[300][300];
  11. int a[30];
  12. bool del[300][300];
  13.  
  14.  
  15. const int dirx[8] = {0, 0, 1, -1, 1, -1, -1, 1};
  16. const int diry[8] = {1, -1, 0, 0, 1, -1, 1, -1};
  17.  
  18. void update()
  19. {
  20.   memset(del, 0, sizeof(del));
  21.   for(int i = 0; i < n; i++)
  22.   {
  23.     for(int j = 0; j < m; j++)
  24.     {
  25.       for(int k = 0; k < 4; k++)
  26.       {
  27.         int q = 2*k;
  28.         int w = 2*k+1;
  29.         if(!(i+diry[q] < n && i+diry[q] >= 0 && j+dirx[q] < m && j+dirx[q] >= 0))
  30.           continue;
  31.         if(!(i+diry[w] < n && i+diry[w] >= 0 && j+dirx[w] < m && j+dirx[w] >= 0))
  32.           continue;
  33.         if(cur[i][j] == cur[i+diry[q]][j+dirx[q]] && cur[i][j] == cur[i+diry[w]][j+dirx[w]] && cur[i][j] != 0)
  34.         {
  35.           del[i][j] = true;
  36.           del[i+diry[q]][j+dirx[q]] = true;
  37.           del[i+diry[w]][j+dirx[w]] = true;
  38.         }
  39.       }
  40.     }
  41.   }
  42.   bool flag = false;
  43.   for(int i = 0; i < n; i++)
  44.     for(int j = 0; j < m; j++)
  45.       if(del[i][j])
  46.       {
  47.         flag = true;
  48.         int q = i;
  49.         cur[i][j] = 0;
  50.         while(q > 0)
  51.         {
  52.           swap(cur[q][j], cur[q-1][j]);
  53.           q--;
  54.         }
  55.       }
  56.   if(flag)
  57.     update();
  58.  
  59. }
  60.  
  61. int main()
  62. {
  63.   //freopen("h.in", "r", stdin);
  64.   //freopen("h.out", "w", stdout);
  65.   int maxx = -1, maxm = -1, maxp = -1;
  66.   scanf("%i%i", &n, &m);
  67.   for(int i = 0; i < n; i++)
  68.     for(int j = 0; j < m; j++)
  69.       scanf("%i", &field[i][j]);
  70.   for(int i = 0; i < 3; i++)
  71.     scanf("%i", &a[i]);
  72.   for(int l = 0; l < 3; l++)
  73.   {
  74.     if(l == 1)
  75.     {
  76.       swap(a[0], a[2]);
  77.       swap(a[0], a[1]);
  78.     }
  79.     if(l == 2)
  80.     {
  81.       swap(a[0], a[1]);
  82.       swap(a[1], a[2]);
  83.     }
  84.     for(int i = 0; i < m; i++)
  85.     {
  86.       for(int q = 0; q < n; q++)
  87.         for(int w = 0; w < m; w++)
  88.           cur[q][w] = field[q][w];
  89.       int j = 0;
  90.       while(j < n && cur[j][i] == 0)
  91.         j++;
  92.       if(j < 3)
  93.         continue;
  94.       j--;
  95.       int sum1 = 0, sum2 = 0;
  96.       for(int q = 0; q < n; q++)
  97.         for(int w = 0; w < m; w++)
  98.           if(cur[q][w] != 0)
  99.             sum1++;
  100.       sum1+=3;
  101.       cur[j][i] = a[2];
  102.       cur[j-1][i] = a[1];
  103.       cur[j-2][i] = a[0];
  104.       update();
  105.       for(int q = 0; q < n; q++)
  106.         for(int w = 0; w < m; w++)
  107.           if(cur[q][w] != 0)
  108.             sum2++;
  109.       /*cout << i << ' ' << l << ' ' << sum1-sum2 << endl;
  110.       for(int q = 0; q < n; q++)
  111.       {
  112.         for(int w = 0; w < m; w++)
  113.           cout << cur[q][w] << ' ';
  114.         cout << endl;
  115.       }
  116.       cout << endl << endl << endl;  */
  117.       if(maxx < sum1 - sum2)
  118.       {
  119.         maxx = sum1-sum2;
  120.         maxm = i;
  121.         maxp = l;
  122.       }
  123.     }
  124.   }
  125.   cout << maxm << ' ' << maxp << ' ' << maxx << endl;
  126.   return 0;
  127. }
Add Comment
Please, Sign In to add comment