banglee @ 2024-10-29 12:47:42
#include<bits/stdc++.h>
using namespace std;
#define int long long
int T,n,m;
char a[1005][1005];
bool vis[1005][1005];
bool check(int x,int y) {
return x>=1 && x<=n && y<=m && y>=1 && a[x][y]=='.';
}
void f(int k,int x,int y,int d) {
int dx=x,dy=y;
vis[x][y]=true;
while(k--) {
if(d==0) {
if(check(dx,dy+1)) vis[dx][++dy]=true;
else d=(d+1)%4;
}
if(d==1) {
if(check(dx+1,dy)) vis[++dx][dy]=true;
else d=(d+1)%4;
}
if(d==2) {
if(check(dx,dy-1)) vis[dx][--dy]=true;
else d=(d+1)%4;
}
if(d==3) {
if(check(dx-1,dy)) vis[--dx][dy]=true;
else d=(d+1)%4;
}
}
}
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>T;
while(T--) {
int k,x,y,d,ans=0;
cin>>n>>m>>k>>x>>y>>d;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
memset(vis,false,sizeof(vis));
f(k,x,y,d);
for(int i=1;i<=1005;i++)
for(int j=1;j<=1005;j++)
if(vis[i][j]) ans++;
cout<<ans<<'\n';
}
return 0;
}
by liangbowen @ 2024-10-29 12:48:14
你数组越界了吧
by dhlsgjr @ 2024-10-29 12:54:31
while循环有问题吧
你这有可能一次操作方向改变了多次
要么判断完之后continue要么在if前加else
数据过水
by dhlsgjr @ 2024-10-29 13:01:26
@banglee while循环的if判断改下就AC了