Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstdlib>
- #include<cstring>
- using namespace std;
- int n, m;
- int field[300][300];
- int cur[300][300];
- int a[30];
- bool del[300][300];
- const int dirx[8] = {0, 0, 1, -1, 1, -1, -1, 1};
- const int diry[8] = {1, -1, 0, 0, 1, -1, 1, -1};
- void update()
- {
- memset(del, 0, sizeof(del));
- for(int i = 0; i < n; i++)
- {
- for(int j = 0; j < m; j++)
- {
- for(int k = 0; k < 4; k++)
- {
- int q = 2*k;
- int w = 2*k+1;
- if(!(i+diry[q] < n && i+diry[q] >= 0 && j+dirx[q] < m && j+dirx[q] >= 0))
- continue;
- if(!(i+diry[w] < n && i+diry[w] >= 0 && j+dirx[w] < m && j+dirx[w] >= 0))
- continue;
- 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)
- {
- del[i][j] = true;
- del[i+diry[q]][j+dirx[q]] = true;
- del[i+diry[w]][j+dirx[w]] = true;
- }
- }
- }
- }
- bool flag = false;
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- if(del[i][j])
- {
- flag = true;
- int q = i;
- cur[i][j] = 0;
- while(q > 0)
- {
- swap(cur[q][j], cur[q-1][j]);
- q--;
- }
- }
- if(flag)
- update();
- }
- int main()
- {
- //freopen("h.in", "r", stdin);
- //freopen("h.out", "w", stdout);
- int maxx = -1, maxm = -1, maxp = -1;
- scanf("%i%i", &n, &m);
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- scanf("%i", &field[i][j]);
- for(int i = 0; i < 3; i++)
- scanf("%i", &a[i]);
- for(int l = 0; l < 3; l++)
- {
- if(l == 1)
- {
- swap(a[0], a[2]);
- swap(a[0], a[1]);
- }
- if(l == 2)
- {
- swap(a[0], a[1]);
- swap(a[1], a[2]);
- }
- for(int i = 0; i < m; i++)
- {
- for(int q = 0; q < n; q++)
- for(int w = 0; w < m; w++)
- cur[q][w] = field[q][w];
- int j = 0;
- while(j < n && cur[j][i] == 0)
- j++;
- if(j < 3)
- continue;
- j--;
- int sum1 = 0, sum2 = 0;
- for(int q = 0; q < n; q++)
- for(int w = 0; w < m; w++)
- if(cur[q][w] != 0)
- sum1++;
- sum1+=3;
- cur[j][i] = a[2];
- cur[j-1][i] = a[1];
- cur[j-2][i] = a[0];
- update();
- for(int q = 0; q < n; q++)
- for(int w = 0; w < m; w++)
- if(cur[q][w] != 0)
- sum2++;
- /*cout << i << ' ' << l << ' ' << sum1-sum2 << endl;
- for(int q = 0; q < n; q++)
- {
- for(int w = 0; w < m; w++)
- cout << cur[q][w] << ' ';
- cout << endl;
- }
- cout << endl << endl << endl; */
- if(maxx < sum1 - sum2)
- {
- maxx = sum1-sum2;
- maxm = i;
- maxp = l;
- }
- }
- }
- cout << maxm << ' ' << maxp << ' ' << maxx << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment