60pts求调
查看原帖
60pts求调
909367
MA_tian楼主2024/11/6 21:28

rt,如题

#include<bits/stdc++.h>
using namespace std;
int t,n,m,k,p[1005][1005];
char a[1005][1005];
int main(){
//	freopen("explore.in","r",stdin);
//	freopen("explore.out","w",stdout);
	cin>>t;
	while(t--){
		memset(p,0,sizeof(p));
		int x,y,to,ans=1;
		cin>>n>>m>>k;
		cin>>x>>y>>to;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>a[i][j];
			}
		}
		p[x][y]=1;
		while(k>0){
			while(k>0){
				if(to==0){
					if(a[x][y+1]!='.'){
						k--;
						to=1;
					}else{
						break;
					}
				}
				if(to==1){
					if(a[x+1][y]!='.'){
						k--;
						to=2;
					}else{
						break;
					}
				}
				if(to==2){
					if(a[x][y-1]!='.'){
						k--;
						to=3;
					}else{
						break;
					}
				}
				if(to==3){
					if(a[x-1][y]!='.'){
						k--;
						to=0;
					}else{
						break;
					}
				}
			}	
			if(k>0){
				if(to==0){
					while(a[x][y+1]=='.'&&k>0){
						y++;
						k--;
						if(!p[x][y])ans++;
						p[x][y]=1;
					}
				}
				if(to==1){
					while(a[x+1][y]=='.'&&k>0){
						x++;
						k--;
						if(!p[x][y])ans++;
						p[x][y]=1;
					}
				}
				if(to==2){
					while(a[x][y-1]=='.'&&k>0){
						y--;
						k--;
						if(!p[x][y])ans++;
						p[x][y]=1;
					}
				}
				if(to==3){
					while(a[x-1][y]=='.'&&k>0){
						x--;
						k--;
						if(!p[x][y])ans++;
						p[x][y]=1;
					}
				}
				
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}
2024/11/6 21:28
加载中...