Guest User

Untitled

a guest
May 22nd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <math.h>
  6. #include <set>
  7. #include <map>
  8. #include <string>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. using namespace std;
  14.  
  15. typedef long long int ll;
  16.  
  17. #define INF int(1e+9)
  18. #define EPS 1e-9
  19. #define TASK "std"
  20.  
  21. int a[50][50];
  22. int b[50][50];
  23. int ok[50][50];
  24. int n,m;
  25.  
  26. void copy() {
  27.     memset(b,0,sizeof(b));
  28.     int p,t;
  29.     for (p=0; p<n; ++p)
  30.         for (t=0; t<m; ++t)
  31.             b[p][t] = a[p][t];
  32.     return;
  33. }
  34.  
  35. int F() {
  36.     int RES = 0;
  37.     memset(ok,0,sizeof(ok));
  38.     int k,l,z;
  39.     int dx[] = {0,1,1,1,0,-1,-1,-1};
  40.     int dy[] = {1,1,0,-1,-1,-1,0,1};
  41.     for (k=0; k<n; ++k)
  42.         for (l=0; l<m; ++l)
  43.             if (b[k][l] != 0) {
  44.                 for (z = 0; z<8; ++z) {
  45.                     int xt = k, yt = l, count = 0, svet = b[k][l];
  46.                     while (xt >= 0 && yt >= 0 && xt < n && yt < m && b[xt][yt] == svet) {
  47.                         ++count;
  48.                         xt += dx[z];
  49.                         yt += dy[z];
  50.                     }
  51.                     if (count >= 3) {
  52.                         int xt = k, yt = l;
  53.                         for (int u = 0; u<count; ++u) {
  54.                             ok[xt][yt] = 1;
  55.                             xt += dx[z];
  56.                             yt += dy[z];
  57.                         }
  58.                     }
  59.                 }
  60.             }
  61.  
  62.     int tmp[50][50];
  63.     memset(tmp,0,sizeof(tmp));
  64.     for (k=0; k<m; ++k) {
  65.         int num = n-1;
  66.         for (l=n-1; l>=0; --l) {
  67.             if (!ok[l][k]) {
  68.                 tmp[num][k] = b[l][k];
  69.                 --num;
  70.             } else
  71.                 RES++;
  72.         }
  73.     }
  74.     for (k=0; k<n; ++k)
  75.         for (l=0; l<m; ++l)
  76.             b[k][l] = tmp[k][l];
  77.     return RES;
  78. }
  79.  
  80. int main()
  81. {
  82.     //freopen(TASK".in","r",stdin);
  83.     //freopen(TASK".out","w",stdout);
  84.     int i,j,h;
  85.     int main_res = -1, pos1,pos2;
  86.     cin>>n>>m;
  87.     for (i=0; i<n; ++i)
  88.         for (j=0; j<m; ++j)
  89.             cin>>a[i][j];
  90.     int w[3];
  91.     for (i=0; i < 3; ++i)
  92.         cin>>w[i];
  93.  
  94.     for (i=0; i<m; ++i) {
  95.         int nach = 0;
  96.         while (nach < n && a[nach][i] == 0)
  97.             ++nach;
  98.         --nach;
  99.         for (j=0; j<3; ++j) {
  100.             copy();
  101.             for (h=2; h>=0; --h)
  102.                 b[nach-h][i] = w[(2-h+j) % 3];
  103.             int tmp_res = 0;
  104.             while (true) {
  105.                 int zzz = F();
  106.                 if (zzz == 0)
  107.                     break;
  108.                 tmp_res += zzz;
  109.             }
  110.             if (tmp_res > main_res) {
  111.                 main_res = tmp_res;
  112.                 pos1 = i; //сдвиг фигурки
  113.                 pos2 = j; //циклических сдвигов
  114.             }
  115.         }
  116.     }
  117.     cout<<pos1<<" "<<pos2<<" "<<main_res<<"\n";
  118.     return 0;
  119. }
Add Comment
Please, Sign In to add comment