作业介绍

#include<iostream>
using namespace std;
int n, m;
int arr[1200][1200] = {};
bool ok(int i, int j) { //最多能够开垦多少块荒地。
	//该荒地可以开垦当且仅当其上下左右四个方向相邻的格子均不存在杂物。
	if (arr[i - 1][j] + arr[i][j + 1] + arr[i + 1][j] + arr[i][j - 1] + arr[i][j] == 0) {
		return true;
	} else {
		return false;
	}
}
int get(int i, int j) {
	int cnt = 0;
	if(ok(i,j) == true){
		cnt+=1;
	}
	if(i-1>=1 && ok(i-1,j)==true){
		cnt+=1;
	}
	if(j+1<=m && ok(i,j+1)==true){
		cnt+=1;
	}
	if(i+1<=n && ok(i+1,j)==true){
		cnt+=1;
	}
	if(j-1 >=1 && ok(i,j-1)==true){
		cnt+=1;
	}
	return cnt;
}
int main() {
	cin >> n >> m;
	char t;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> t;
			if (t == '.') {
				arr[i][j] = 0;
			} else {
				arr[i][j] = 1;
			}
			//cin >> arr[i][j];
		}
	}
	int cnt = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (ok(i,j) == true) {
				cnt += 1;
			}
		}
	}
	int Max = 0;
	//cout << Max;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (arr[i][j] == 1) {
				arr[i][j] = 0;
				int nn = get(i,j);
				if (nn > Max) {
					Max = nn;
				}
				arr[i][j] = 1;
			}
		}
	}
	cout << Max+cnt;
	
	return 0;
}

题目

状态
已结束
题目
1
开始时间
2025-3-31 0:00
截止时间
2025-4-8 23:59
可延期
24 小时