样例过了一半。
查看原帖
样例过了一半。
1798181
hanqiu123楼主2025/8/30 18:34

样例的循环第一个过了,第二个没过。
12345那里第一次运行了,第二次没运行。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const short dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
char c[1005][1005];
bool bb[1005][1005];
int T,m,n,k,x,y,d,ans,x1,y1;
int main(){
	
	scanf("%d",&T);
	while(T--){
		ans=0;
		memset(bb,0,sizeof(bb));
		cin>>n>>m>>k;//12345
	//	scanf("%d%d%d",&n,&m,&k);
		printf("n:%d %d %d\n",n,m,k);
		cin>>x>>y>>d;
	//	scanf("%d%d%d",&x,&y,&d);
		printf("x:%d %d %d\n",x,y,d);
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++)
				scanf("%c",&c[i][j]);
		}
		//printf("okk"); 
		bb[x][y]=1;
		while(k-->0){
			x1=x+dx[d],y1=y+dy[d];
			if(1<=x1&&x1<=n&&1<=y1&&y1<=m&&c[x1][y1]=='.'){
				x=x1,y=y1;
				
	//			printf("visited %d %d   ",x,y);
			}
			else{
				d=(d+1)%4;
	//			printf("%d %d is not ok   ",x1,y1);
	//			printf("now is at %d %d,d=%d",x,y,d);
			}
			bb[x][y]=1;
			
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++) {
				if(bb[i][j]) ans++;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
} 
2025/8/30 18:34
加载中...