2 条题解

  • 0
    @ 2024-11-7 20:26:27

    本题属于模拟题,题目很长,但是没有那么难理解。

    根据题目描述直接进行模拟,下面是几个要点:

    1. 需要注意在代码中所使用的横纵坐标,其中 y1 等变量名不应定义为全局变量(尤其是在有万能头文件的情况下),以免出现编译错误。

    2. 横纵坐标等用错可能会出现通过样例但是未 AC 的情况(例如说在一处 y1 错写为 y0 等情况)

    3. 一个测试样例,会提问好几次,每次提问记得把数组清空!!!不然扣80分!!

    4. 最后就是细节决定成败了。

    #include<bits/stdc++.h>
    using namespace std;
    char a[1004][1004];
    
    int n,m,k,x,y,d;
    int check(int x,int y){//检查能不能走
    	if(x<1||x>n||y<1||y>m){
    		return 0;
    	}
    	if(a[x][y]=='x'){
    		return 0;
    	}
    	return 1;
    }
    int main(){
    	freopen("explore.in","r",stdin);
    	freopen("explore.out","w",stdout);
    	int t;
    	scanf("%d",&t);
    	while(t--){
    		bool vis[1004][1004]={};
    		scanf("%d%d%d%d%d%d",&n,&m,&k,&x,&y,&d);
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=m;j++){
    				cin>>a[i][j];
    			}
    		}
    		int ans=1;
    		for(int step=0;step<k;step++){
    			int ax,ay;
    			if(d==0){
    				ax=x;
    				ay=y+1; 
    			}
    			else if(d==1){
    				ax=x+1;
    				ay=y; 
    			}
    			else if(d==2){
    				ax=x;
    				ay=y-1;
    			}
    			else if(d==3){
    				ax=x-1;
    				ay=y;
    			}
    			//cout<<step<<" "<<x<<" "<<y<<" "<<ax<<" "<<ay<<" "<<d;
    			vis[x][y]=1;
    			if(check(ax,ay)){
    				x=ax;
    				y=ay;
    				if(!vis[ax][ay]){
    					ans++;
    				}
    			}
    			else{
    				d=(d+1)%4;
    			}
    			
    		}
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    

    信息

    ID
    1062
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    1
    已通过
    1
    上传者