15分样例未过求救
查看原帖
15分样例未过求救
943498
wangshenluogu楼主2024/7/9 17:04

提交记录:https://www.luogu.com.cn/record/164848238

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,a[1001][1001],ans=0;
int dx[8]={-1,-1,-1,0,0,1,1,1};
int dy[8]={-1,0,1,-1,1,-1,0,1};
void jdfs(int x,int y)
{
	int p=1;
    for(int i=0;i<8;i++)
	{
        int nx=x+dx[i];
        int ny=y+dy[i];
        if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]==1){
            p=0;
        }
    }
    if(p==1){
    	a[x][y]=2;
	}else{
		a[x][y]=3;
	}
    return;
}
void jjdfs(int x,int y){
	int p=1;
    for(int i=0;i<8;i++){
        int nx=x+dx[i];
        int ny=y+dy[i];
        if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]!=2){
            p=0;
        }
    }
    if(p==1){
    	ans++;
    	//cout<<x<<" "<<y<<endl;
	}
    return;
}
void jjjdfs(int x,int y){
	int p=1;
    for(int i=0;i<8;i++){
        int nx=x+dx[i];
        int ny=y+dy[i];
        if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]==2){
            p=0;
        }
    }
    if(p==1){
    	ans++;
    	//cout<<x<<" "<<y<<endl;
	}
    return;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
    		cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
    		if(a[i][j]!=1){
    			jdfs(i,j);
			}
		}
	}
	//for(int i=1;i<=n;i++){
    //	for(int j=1;j<=m;j++){
    //		cout<<a[i][j]<<" ";
	//	}
	//	cout<<endl;
	//}
	for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
    		if(a[i][j]==2){
    			jjdfs(i,j);
			}
		}
	}
	for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
    		if(a[i][j]==3){
    			jjjdfs(i,j);
			}
		}
	}
	cout<<ans<<endl;
    return 0;
}

样例调试结果(去掉代码中所有注释部分)

3 3 3 1 1 3 3 3
1 3 3 1 3 3 3 1
1 3 3 1 3 2 3 3
3 3 3 3 3 3 3 2
2 2 2 2 3 1 3 2
2 2 2 2 3 3 3 2
3 3 3 2 2 2 2 2
3 1 3 2 2 2 2 2
8 5
8 6
8 7
8 8
1 1
1 2
1 3
1 6
1 7
1 8
2 2
2 3
3 2
3 3
8 1
15

本帖禁止无意义发言,请提供有效帮助。

2024/7/9 17:04
加载中...