2024 CSP-J 第二轮 T2题解
2025-08-16 14:29:58
发布于:江苏
153阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int MX=1005;
//方向数组
int dx[]={0,1,0,-1};//横向
int dy[]={1,0,-1,0};//纵向
char a[MX][MX];
int n,m,k,x,y,d;
bool vis[MX][MX];
int f(int x,int y,int d){
//先假设机器人的位置
x+=dx[d];
y+=dy[d];
if(x>n||x<1||y>m||y<1||a[x][y]=='x')return 0;
//越界和障碍判断,如果为真则表示下一步可以走
return 1;
}
int main(){
// freopen("explore.in","r",stdin);
// freopen("explore.out","w",stdout);
int T;
cin>>T;
while(T--){
int ans=0;
cin>>n>>m>>k>>x>>y>>d;
memset(vis,0,sizeof vis);//标记数组初始化
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
//起点需标记为1,即起点已经过
vis[x][y]=1;
while(k--){
if(f(x,y,d)){
x+=dx[d];
y+=dy[d];
vis[x][y]=1;//下一步可以走则标记为真
}
else d=(d+1)%4;//转向
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(vis[i][j]==1)ans++;
}
}
cout<<ans<<endl;
}
// fclose(stdin);
// fclose(stdout);
}
全部评论 1
我TM在上海初赛83结果他说分数线87
2025-06-26 来自 上海
0+1
我822025-07-09 来自 上海
0
有帮助,赞一个