Advertisement
PedalaVasile

Zona2

Feb 19th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4. #include <bitset>
  5. #include <stack>
  6.  
  7. using namespace std;
  8.  
  9. ifstream fin("zona2.in");
  10. ofstream fout("zona2.out");
  11.  
  12. int I, J, N, L;
  13. int v[2501];
  14. int A[55][55];
  15.  
  16. int start, stop;
  17.  
  18. int a[] =  {+1, +2, +4, +8};
  19. int di[] = {-1, +0, +1, +0};
  20. int dj[] = {+0, +1, +0, -1};
  21.  
  22. bitset < 55 > viz[55];
  23. stack < pair < int, int > > stk;
  24.  
  25. int Fill(int i, int j)
  26. {
  27.     stk.push(make_pair(i, j));
  28.     viz[i][j] = 1;
  29.  
  30.     int c = 0;
  31.  
  32.     while(!stk.empty())
  33.     {
  34.         i = stk.top().first;
  35.         j = stk.top().second;
  36.  
  37.         stk.pop();
  38.  
  39.         c++;
  40.  
  41.         cout << i << ' ' << j << '\n';
  42.  
  43.         for(int k = 0; k < 4; k++)
  44.         {
  45.             if((A[i][j] & a[k]) != a[k] && !viz[i + di[k]][j + dj[k]])
  46.             {
  47.                 viz[i + di[k]][j + dj[k]] = 1;
  48.                 stk.push(make_pair(i +  di[k], j + dj[k]));
  49.             }
  50.         }
  51.     }
  52.  
  53.     return c;
  54. }
  55.  
  56. int FillOut(int i, int j)
  57. {
  58.     stk.push(make_pair(i, j));
  59.     viz[i][j] = 1;
  60.  
  61.     int c = 0;
  62.  
  63.     while(!stk.empty())
  64.     {
  65.         c++;
  66.  
  67.         i = stk.top().first;
  68.         j = stk.top().second;
  69.  
  70.         stk.pop();
  71.  
  72.         for(int k = 0; k < 4; k++)
  73.         {
  74.             if((A[i][j] & a[k]) != a[k] && !viz[i + di[k]][j + dj[k]])
  75.             {
  76.                 viz[i + di[k]][j + dj[k]] = 1;
  77.                 stk.push(make_pair(i +  di[k], j + dj[k]));
  78.             }
  79.         }
  80.     }
  81.  
  82.     return c;
  83. }
  84.  
  85. int main()
  86. {
  87.     fin >> I >> J >> N >> L;
  88.  
  89.     start = I;
  90.     stop = J;
  91.  
  92.     int dir;
  93.  
  94.     for(int i = 0; i < L; i++)
  95.     {
  96.         fin >> dir;
  97.  
  98.         /// 1 -> sus, 2 -> dr, 3 -> jos, 4 -> st
  99.  
  100.         if(dir == 1)
  101.         {
  102.             A[I][J] |= 2;
  103.             A[I][J + 1] |= 8;
  104.             I--;
  105.         }
  106.         else if(dir == 2)
  107.         {
  108.             J++;
  109.             A[I][J] |= 4;
  110.             A[I + 1][J] |= 1;
  111.         }
  112.         else if(dir == 3)
  113.         {
  114.             I++;
  115.             A[I][J] |= 2;
  116.             A[I][J + 1] |= 8;
  117.         }
  118.         else if(dir == 4)
  119.         {
  120.             A[I][J] |= 4;
  121.             A[I + 1][J] |= 1;
  122.             J--;
  123.         }
  124.     }
  125.  
  126.     for(int i = 1; i <= N; i++)
  127.     {
  128.         for(int j = 1; j <= N; j++)
  129.             fout << setw(3) << A[i][j] << ' ';
  130.  
  131.         fout << '\n';
  132.     }
  133.  
  134.     int Out;
  135.  
  136.     for(int i = 1; i <= N; i++)
  137.     {
  138.         bool oke = false;
  139.  
  140.         for(int j = 1; j <= N; j++)
  141.             if(A[i][j] == 0)
  142.             {
  143.                 Out = FillOut(i, j);
  144.                 oke = true;
  145.             }
  146.  
  147.  
  148.         if(oke)
  149.             break;
  150.     }
  151.  
  152.     int In;
  153.  
  154.     for(int i = 1; i <= N; i++)
  155.     {
  156.         bool oke = false;
  157.  
  158.         for(int j = 1; j <= N; j++)
  159.             if(!viz[i][j])
  160.             {
  161.                 In = Fill(i, j);
  162.                 oke = true;
  163.             }
  164.  
  165.         if(oke)
  166.             break;
  167.     }
  168.  
  169.     fout << In << ' ' << Out;
  170.  
  171.  
  172.     fin.close();
  173.     fout.close();
  174.     return 0;
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement