神奇のRE
查看原帖
神奇のRE
680022
Rice_Demon_King楼主2024/7/25 10:54

题目传送门

评测惨案

代码如下

//#pragma GCC optimize( 2 )
#include<bits/stdc++.h>
#define MAXN 1009
#define For(i,j,k) for(int i=j;i<=k;++i)
#define dFor(i,j,k) for(int i=j;i>=k;--i)
#define ll long long
using namespace std;
int n,m,vis[MAXN][MAXN];
bool f[MAXN];
map<char,int> dx,dy;
char tmap[MAXN][MAXN];
void dfs(int x,int y,int color){
	vis[x][y]=color;
	int nx=x+dx[tmap[x][y]],ny=y+dy[tmap[x][y]];
	if(nx<1||nx>n||ny<1||ny>m) return ;
	if(tmap[nx][ny]=='o'){
		f[color]=true;
		return ;
	}
	if(vis[nx][ny]!=0){
		if(f[vis[nx][ny]]==true) f[color]=true;
		return ;
	}
	dfs(nx,ny,color);
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	dx['u']=-1,dy['u']=0,dx['d']=1,dy['d']=0,dx['l']=0,dy['l']=-1,dx['r']=0,dy['r']=1;
	cin>>n>>m;
	For(i,1,n){
		For(j,1,m){
			cin>>tmap[i][j];
		}
	}
	int now=1;
	For(i,1,n){
		For(j,1,m){
			if(tmap[i][j]=='o') continue;
			if(vis[i][j]==0){
				dfs(i,j,now);	
				now++;
			} 
		}
	}
	int ans=0;
	For(i,1,n){
		For(j,1,m){
			if(tmap[i][j]=='o'){
				ans++;
				continue;
			}
			if(f[vis[i][j]]==true) ans++;
		}
	}
	cout<<ans;
	return 0;
}

2024/7/25 10:54
加载中...