求助!!!#9WA
查看原帖
求助!!!#9WA
600315
neilliu楼主2022/8/16 16:30
#include<bits/stdc++.h>
using namespace std;
char ma[1505][1505];
int ans[100005],ge = 0,n,m,cnt = 1;
bool vis[1505][1505];
int dx[10] = {0,1,0,-1,1,-1,1,-1};
int dy[10] = {1,0,-1,0,1,1,-1,-1};
void dfs(int x,int y)
{
	bool flag = 1;
	for(int i = 0; i < 8; i++){
		int nx = x + dx[i],ny = y + dy[i];
		if(ma[nx][ny] != '*') continue;
		if(vis[nx][ny] == 0){
			flag = 0;
			break;
		}
	}
	if(flag) return ;
	for(int i = 0; i < 8; i++){
		int nx = x + dx[i],ny = y + dy[i];
		if(nx >= 1 && ny >= 1 && nx <= n && ny <= m && vis[nx][ny] == 0 && ma[nx][ny] == '*'){
			vis[nx][ny] = 1;
			cnt++;
			dfs(nx,ny);
		}
	}
}
int main()
{
	memset(vis,0,sizeof(vis));
	scanf("%d%d",&n,&m);	
	for(int i = 1; i <= n; i++){
		for(int j = 1;j <= m; j++){
			cin >> ma[i][j];
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			if(vis[i][j] == 0 && ma[i][j] == '*'){
				vis[i][j] = 1;
				dfs(i,j);
				ans[ge++] = cnt;
				cnt = 1;
			}
		}
	}
	sort(ans,ans+ge);
//	for(int i = 0; i < ge; i++){
//		printf("%d ",ans[i]);
//	}
//	cout << endl;
	int l = 0,ci = 0;
	int ans1 = 0;
	cnt = 0;
	for(int i = 0; i < ge; i++){
		if(ans[i] != l){
			ci++;
			l = ans[i];
			cnt = max(cnt,ans1);
			ans1 = 0;
		}
		ans1 += l;
	}
	cnt = max(cnt,ans1);
	printf("%d %d",ci,cnt);
	return 0;	
} 

求大佬调,谢谢!!!

2022/8/16 16:30
加载中...