10分代码求调
  • 板块灌水区
  • 楼主mc2djwh
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/31 14:18
  • 上次更新2024/8/31 17:49:53
查看原帖
10分代码求调
1277996
mc2djwh楼主2024/8/31 14:18

rt,p4961
样例没过还对了两个点
码风一般尽量看看吧QAQ

#include<bits/stdc++.h>
using namespace std;
const int dx[8]={-1,-1,-1,0,1,1,1,0},dy[8]={-1,0,1,1,1,0,-1,-1};
bool pd(int x,int y,int n,int m){
	return x>=0&&x<n&&y>=0&&y<m;
}
void dfs(int x,int y,vector<vector<int>>&zu,vector<vector<int>>&feng,int n,int m){
	feng[x][y]=1;
	for(int d=0;d<8;d++){
		int nx=x+dx[d];
		int ny=y+dy[d];
		if(pd(nx,ny,n,m)&&feng[nx][ny]==0&&zu[nx][ny]==0){
			bool kong=true;
			for(int dd=0;dd<8;dd++){
				int nnx=nx+dx[dd];
				int nny=ny+dy[dd];
				if(pd(nnx,nny,n,m)&&zu[nnx][nny]==0){
					kong=false;
					break;
				}
			}
			if(kong)dfs(nx,ny,zu,feng,n,m);
		}
	}
}
int main(){
	int n,m;
	cin>>n>>m;
	vector<vector<int>>zu(n,vector<int>(m)),feng(n,vector<int>(m,0));
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			cin>>zu[i][j];
	int shuCnt=0;
	int kongCnt=0;
	auto jiSuanLei=[&](int x,int y)->int{
		int cnt=0;
		for(int d=0;d<8;d++){
			int nx=x+dx[d];
			int ny=y+dy[d];
			if(pd(nx,ny,n,m)&&zu[nx][ny]==1)
				cnt++;
		}
		return cnt;
	};
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(zu[i][j]==0&&feng[i][j]==0){
				bool kong=true;
				for(int d=0;d<8;d++){
					int nx=i+dx[d];
					int ny=j+dy[d];
					if(pd(nx,ny,n,m)&&zu[nx][ny]==1){
						kong=false;
						break;
					}
				}
				if(kong){
					dfs(i,j,zu,feng,n,m);
					kongCnt++;
				}
			}
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(zu[i][j]==0){
				int leiCnt=jiSuanLei(i,j);
				if(leiCnt>0)
					shuCnt++;
			}
		}
	}
	cout<<shuCnt+kongCnt<<endl;
	return 0;
}
2024/8/31 14:18
加载中...