Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <iomanip>
- #include <bitset>
- #include <stack>
- using namespace std;
- ifstream fin("zona2.in");
- ofstream fout("zona2.out");
- int I, J, N, L;
- int v[2501];
- int A[55][55];
- int start, stop;
- int a[] = {+1, +2, +4, +8};
- int di[] = {-1, +0, +1, +0};
- int dj[] = {+0, +1, +0, -1};
- bitset < 55 > viz[55];
- stack < pair < int, int > > stk;
- int Fill(int i, int j)
- {
- stk.push(make_pair(i, j));
- viz[i][j] = 1;
- int c = 0;
- while(!stk.empty())
- {
- i = stk.top().first;
- j = stk.top().second;
- stk.pop();
- c++;
- cout << i << ' ' << j << '\n';
- for(int k = 0; k < 4; k++)
- {
- if((A[i][j] & a[k]) != a[k] && !viz[i + di[k]][j + dj[k]])
- {
- viz[i + di[k]][j + dj[k]] = 1;
- stk.push(make_pair(i + di[k], j + dj[k]));
- }
- }
- }
- return c;
- }
- int FillOut(int i, int j)
- {
- stk.push(make_pair(i, j));
- viz[i][j] = 1;
- int c = 0;
- while(!stk.empty())
- {
- c++;
- i = stk.top().first;
- j = stk.top().second;
- stk.pop();
- for(int k = 0; k < 4; k++)
- {
- if((A[i][j] & a[k]) != a[k] && !viz[i + di[k]][j + dj[k]])
- {
- viz[i + di[k]][j + dj[k]] = 1;
- stk.push(make_pair(i + di[k], j + dj[k]));
- }
- }
- }
- return c;
- }
- int main()
- {
- fin >> I >> J >> N >> L;
- start = I;
- stop = J;
- int dir;
- for(int i = 0; i < L; i++)
- {
- fin >> dir;
- /// 1 -> sus, 2 -> dr, 3 -> jos, 4 -> st
- if(dir == 1)
- {
- A[I][J] |= 2;
- A[I][J + 1] |= 8;
- I--;
- }
- else if(dir == 2)
- {
- J++;
- A[I][J] |= 4;
- A[I + 1][J] |= 1;
- }
- else if(dir == 3)
- {
- I++;
- A[I][J] |= 2;
- A[I][J + 1] |= 8;
- }
- else if(dir == 4)
- {
- A[I][J] |= 4;
- A[I + 1][J] |= 1;
- J--;
- }
- }
- for(int i = 1; i <= N; i++)
- {
- for(int j = 1; j <= N; j++)
- fout << setw(3) << A[i][j] << ' ';
- fout << '\n';
- }
- int Out;
- for(int i = 1; i <= N; i++)
- {
- bool oke = false;
- for(int j = 1; j <= N; j++)
- if(A[i][j] == 0)
- {
- Out = FillOut(i, j);
- oke = true;
- }
- if(oke)
- break;
- }
- int In;
- for(int i = 1; i <= N; i++)
- {
- bool oke = false;
- for(int j = 1; j <= N; j++)
- if(!viz[i][j])
- {
- In = Fill(i, j);
- oke = true;
- }
- if(oke)
- break;
- }
- fout << In << ' ' << Out;
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement