Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef pair<int, int> pii;
- const int N = 17;
- pii dir[4] = {pii(0, 1), pii(0, -1), pii(1, 0), pii(-1, 0)};
- int board[N + 2][N + 2];
- int BFS(int r, int c){
- queue<pii> que;
- int tr = board[r][c];
- board[r][c] = 0;
- int cnt = 1;
- que.emplace(r, c);
- while(!que.empty()){
- int ur = que.front().first;
- int uc = que.front().second;
- que.pop();
- for(int d = 0; d < 4; ++d){
- int vr = ur + dir[d].first;
- int vc = uc + dir[d].second;
- if(board[vr][vc] == tr){
- board[vr][vc] = 0;
- ++cnt;
- que.emplace(vr, vc);
- }
- }
- }
- return cnt;
- }
- int main(){
- int n;
- scanf("%d", &n);
- for(int i = 1; i <= n; ++i){
- for(int j = 1; j <= n; ++j){
- scanf("%d", &board[i][j]);
- }
- }
- int cnt = 0;
- for(int i = 1; i <= n; ++i){
- for(int j = 1; j <= n; ++j){
- if(board[i][j] == 0){
- continue;
- }
- int tr = board[i][j];
- bool isCandidate = false;
- if(board[i][j + 1] == tr && board[i + 1][j] == tr){
- isCandidate = true;
- } else if(board[i + 1][j - 1] == tr && board[i + 1][j] == tr){
- isCandidate = true;
- } else if(board[i][j + 1] == tr && board[i + 1][j + 1] == tr){
- isCandidate = true;
- } else if(board[i + 1][j] == tr && board[i + 1][j + 1] == tr){
- isCandidate = true;
- }
- if(BFS(i, j) == 3 && isCandidate){
- ++cnt;
- }
- }
- }
- cout << cnt;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement