Untitled
unknown
plain_text
a year ago
3.2 kB
6
Indexable
#include<bits/stdc++.h>
using namespace std;
int matrix[2000][2000];
bool check_condition(int row1, int col1, int row2, int col2) {
// Neu khac hang khac cot
if (row1 != row2 && col1 != col2) {
int count = 0;
// Kiem tra 4 o tren duoi trai phai
if (row2 > 0 && matrix[row2 - 1][col2] == 1) count++;
if (row2 < 1999 && matrix[row2 + 1][col2] == 1) count++;
if (col2 > 0 && matrix[row2][col2 - 1] == 1) count++;
if (col2 < 1999 && matrix[row2][col2 + 1] == 1) count++;
if (count >= 3) return true;
// Kiem tra tiep cac o co gia tri 1
if (row2 > 0 && matrix[row2 - 1][col2] == 1 && (row2 - 1 != row1 && col2 != col1)) return true;
if (row2 < 1999 && matrix[row2 + 1][col2] == 1 && (row2 + 1 != row1 && col2 != col1)) return true;
if (col2 > 0 && matrix[row2][col2 - 1] == 1 && (row2 != row1 && col2 - 1 != col1)) return true;
if (col2 < 1999 && matrix[row2][col2 + 1] == 1 && (row2 != row1 && col2 + 1 != col1)) return true;
return false;
}
// Neu cùng hàng
if (row1 == row2) {
// Kiem tra 4 ô trên duoi trái phai cua (row2, col2)
bool hasOne = false;
if (row2 > 0 && matrix[row2 - 1][col2] == 1) hasOne = true;
if (row2 < 1999 && matrix[row2 + 1][col2] == 1) hasOne = true;
if (col2 > 0 && matrix[row2][col2 - 1] == 1) hasOne = true;
if (col2 < 1999 && matrix[row2][col2 + 1] == 1) hasOne = true;
// Neu không có ô nào có giá tri 1, tra ve false
if (!hasOne) return false;
int start = std::min(col1, col2) + 1;
int end = std::max(col1, col2);
for (int col = start; col < end; ++col) {
if (matrix[row1][col] == 0) {
return true;
}
}
}
// Neu cùng cot
if (col1 == col2) {
// Kiem tra 4 ô trên duoi trái phai cua (row2, col2)
bool hasOne = false;
if (row2 > 0 && matrix[row2 - 1][col2] == 1) hasOne = true;
if (row2 < 1999 && matrix[row2 + 1][col2] == 1) hasOne = true;
if (col2 > 0 && matrix[row2][col2 - 1] == 1) hasOne = true;
if (col2 < 1999 && matrix[row2][col2 + 1] == 1) hasOne = true;
// Neu không có ô nào có giá tri 1, tra ve false
if (!hasOne) return false;
int start = std::min(row1, row2) + 1;
int end = std::max(row1, row2);
for (int row = start; row < end; ++row) {
if (matrix[row][col1] == 0) {
return true;
}
}
}
return false;
}
int main () {
int n, m;
cin >> n >> m;
vector<pair<int, int>> ls;//list square
for (int i = 0; i < n; i++) {
for (int e = 0; e < m; e++) {
cin >> matrix[i][e];
if (matrix[i][e] == 1) ls.push_back(make_pair(i, e));
}
}
int count = 0;
for (int fk = 0; fk < ls.size(); fk++) { //first king
for (int sk = fk + 1; sk < ls.size(); sk++) { //second king
if (check_condition(ls[fk].first, ls[fk].second, ls[sk].first, ls[sk].second)) count++;
}
}
cout << count;
}Editor is loading...
Leave a Comment