Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include <vector>
- #include <math.h>
- #include <set>
- #include <map>
- #include <string>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- using namespace std;
- typedef long long int ll;
- #define INF int(1e+9)
- #define EPS 1e-9
- #define TASK "std"
- int a[50][50];
- int b[50][50];
- int ok[50][50];
- int n,m;
- void copy() {
- memset(b,0,sizeof(b));
- int p,t;
- for (p=0; p<n; ++p)
- for (t=0; t<m; ++t)
- b[p][t] = a[p][t];
- return;
- }
- int F() {
- int RES = 0;
- memset(ok,0,sizeof(ok));
- int k,l,z;
- int dx[] = {0,1,1,1,0,-1,-1,-1};
- int dy[] = {1,1,0,-1,-1,-1,0,1};
- for (k=0; k<n; ++k)
- for (l=0; l<m; ++l)
- if (b[k][l] != 0) {
- for (z = 0; z<8; ++z) {
- int xt = k, yt = l, count = 0, svet = b[k][l];
- while (xt >= 0 && yt >= 0 && xt < n && yt < m && b[xt][yt] == svet) {
- ++count;
- xt += dx[z];
- yt += dy[z];
- }
- if (count >= 3) {
- int xt = k, yt = l;
- for (int u = 0; u<count; ++u) {
- ok[xt][yt] = 1;
- xt += dx[z];
- yt += dy[z];
- }
- }
- }
- }
- int tmp[50][50];
- memset(tmp,0,sizeof(tmp));
- for (k=0; k<m; ++k) {
- int num = n-1;
- for (l=n-1; l>=0; --l) {
- if (!ok[l][k]) {
- tmp[num][k] = b[l][k];
- --num;
- } else
- RES++;
- }
- }
- for (k=0; k<n; ++k)
- for (l=0; l<m; ++l)
- b[k][l] = tmp[k][l];
- return RES;
- }
- int main()
- {
- //freopen(TASK".in","r",stdin);
- //freopen(TASK".out","w",stdout);
- int i,j,h;
- int main_res = -1, pos1,pos2;
- cin>>n>>m;
- for (i=0; i<n; ++i)
- for (j=0; j<m; ++j)
- cin>>a[i][j];
- int w[3];
- for (i=0; i < 3; ++i)
- cin>>w[i];
- for (i=0; i<m; ++i) {
- int nach = 0;
- while (nach < n && a[nach][i] == 0)
- ++nach;
- --nach;
- for (j=0; j<3; ++j) {
- copy();
- for (h=2; h>=0; --h)
- b[nach-h][i] = w[(2-h+j) % 3];
- int tmp_res = 0;
- while (true) {
- int zzz = F();
- if (zzz == 0)
- break;
- tmp_res += zzz;
- }
- if (tmp_res > main_res) {
- main_res = tmp_res;
- pos1 = i; //сдвиг фигурки
- pos2 = j; //циклических сдвигов
- }
- }
- }
- cout<<pos1<<" "<<pos2<<" "<<main_res<<"\n";
- return 0;
- }
Add Comment
Please, Sign In to add comment