【华为OD】B\C卷真题 100%通过:需要打开多少监控器 C/C++实现
【华为OD】B\C卷真题 100%通过:需要打开多少监控器 C/C++实现
目录
题目描述:
示例1
代码实现:
题目描述:
某长方形停车场,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开;
给出某一时刻停车场的停车分布,请统计最少需要打开多少个监控器;
输入描述
第一行输入m,n表示长宽,满足1<m,n<=20;后面输入m行,每行有n个0或1的整数,整数间使用一个空格隔开,表示该行已停车情况,其中0表示空位,1表示已停;
输出描述
最少需要打开监控器的数量;
示例1
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3 3
0 0 0
0 1 0
0 0 0
输出
5
代码实现:
#include <vector>
#include <iostream>
using namespace std;
int getCnt(const vector<vector<int>> &park)
{
int count = 0;
int m = park.size();
int n = park[0].size();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (park[i][j] == 1) {
count++;
}
else if (j - 1 >= 0 && park[i][j - 1] == 1) {
count++;
}
else if (j + 1 < n && park[i][j + 1] == 1) {
count++;
}
else if (i - 1 >= 0 && park[i - 1][j] == 1) {
count++;
}
else if (i + 1 < m && park[i + 1][j] == 1) {
count++;
}
}
}
return count;
}
int main() {
int m, n;
cin >> m >> n;
vector<vector<int>> park(m, vector<int>(n,0));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> park[i][j];
}
}
cout << getCnt(park) << endl;
return 0;
}