1 条题解

  • 0
    @ 2026-1-14 20:09:53
    #include<bits/stdc++.h>
    using namespace std;
    int n,m,row,col;  // [1] n-网格的行列数(n×n),m-指令序列的长度,row/col-机器人初始坐标
    string s;  // [2] s-存储机器人的移动指令序列(仅包含U、D、L、R)
    
    // [3] dfs函数:模拟从第j个指令开始执行的过程,统计可连续执行的指令数
    // x,y:当前机器人的坐标;step:已成功执行的指令数;j:当前要执行的指令索引
    void dfs(int x,int y,int step,int j){
        if(j>=m){  // [4] 若当前指令索引超出序列长度(无后续指令),输出已执行的指令数并返回
            cout<<step<<endl;
            return;
        }
        
        // 根据当前指令,计算移动的偏移量a(行变化)、b(列变化)
        int a=0,b=0;
        if(s[j]=='U'){a=-1;b=0;}  // [5] 指令U:向上移动,行-1
        if(s[j]=='D'){a=1;b=0;}   // [6] 指令D:向下移动,行+1
        if(s[j]=='L'){a=0;b=-1;}  // [7] 指令L:向左移动,列-1
        if(s[j]=='R'){a=0;b=1;}   // [8] 指令R:向右移动,列+1
        
        x+=a; y+=b;  // [9] 计算执行当前指令后的新坐标
        
        // 判断新坐标是否在网格范围内(0≤x<n 且 0≤y<n)
        if((x>=0 && x<n) && (y>=0 && y<n)){
            // 若在网格内,继续执行下一条指令(已执行数+1,指令索引+1)
            dfs(x,y,step+1,j+1);
        }else{
            // 若不在网格内,当前指令无法执行,输出已执行的指令数并返回
            cout<<step<<endl;
            return;
        }
    }
    
    int main(){
    	cin>>n>>m>>row>>col>>s;  // [10] 输入网格大小、指令长度、初始坐标、指令序列
    	
    	// 遍历每个指令索引i,模拟从第i个指令开始执行的过程
    	for(int i=0;i<m;i++){
    	    // 初始坐标为(row,col),已执行指令数为0,从第i个指令开始执行
    	    dfs(row,col,0,i);
    	}
    	return 0;
    }
    
    • 1

    信息

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