2 条题解

  • 1
    @ 2024-11-24 16:07:16

    • 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;
      }
      
      • 1

      信息

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