GDDS @ 2025-01-05 09:36:42
评测记录
#include<bits/stdc++.h>
using namespace std;
int cnt=1,f,t,n,m,k,x,y,z;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0},vis[1005][1005];
char a[1005][1005];
int main(){
// freopen("explore.in","r",stdin);
// freopen("explore.out","w",stdout);
cin>>t;
while(t--){
cin>>n>>m>>k>>x>>y>>z;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
vis[x][y]=1;
while(k){
if(a[x+dx[z]][y+dy[z]]=='.'){
k--;
x+=dx[z];
y+=dy[z];
if(!vis[x][y]) cnt++,vis[x][y]=1;
}
else z=(z+1)%4,k--;
}
cout<<cnt<<endl;
f=0;
memset(vis,0,sizeof(vis));
cnt=1;
}
}
by Ybll_ @ 2025-01-05 09:52:31
@GDDS
献上蒟蒻的丑陋代码。
#include<bits/stdc++.h>
using namespace std;
long long mp[1005][1005];
void slove()
{
long long n,m,k,d=0,x=0,y=0,ans=0;
cin>>n>>m>>k>>x>>y>>d;
if(k>1e7)k=1e7;
x--;
y--;
memset(mp,0,sizeof(mp));
for(long long i=0;i<n;i++)
{
string s;
cin>>s;
for(long long j=0;j<m;j++)
{
if(s[j]=='.')mp[i][j]=1;
else mp[i][j]=0;
}
}
while(k--)
{
if(d==0)
{
if(mp[x][y+1]!=0&&y+1<m)
{
if(mp[x][y]==1)ans++;
mp[x][y]=-1;
y++;
}
else d++;
continue;
}
if(d==1)
{
if(mp[x+1][y]!=0&&x+1<n)
{
if(mp[x][y]==1)ans++;
mp[x][y]=-1;
x++;
}
else d++;
continue;
}
if(d==2)
{
if(mp[x][y-1]!=0&&y-1>-1)
{
if(mp[x][y]==1)ans++;
mp[x][y]=-1;
y--;
}
else d++;
continue;
}
if(d==3)
{
if(mp[x-1][y]!=0&&x-1>-1)
{
if(mp[x][y]==1)ans++;
mp[x][y]=-1;
x--;
}
else d++;
}
if(d==4)d=0;
}
if(mp[x][y]==1)ans++;
cout<<ans<<"\n";
return;
}
int main()
{
// freopen("explore.in","r",stdin);
// freopen("explore.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long t;
cin>>t;
while(t--)
{
slove();
}
return 0;
}
求关
by JYC130604 @ 2025-01-05 09:59:20
我的丑陋代码
#include <bits/stdc++.h>
using namespace std;
int t,n,m,k,x,y,d,sum,vis[1005][1005],dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
char mp[1005][1005];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
sum=0;
memset(vis,0,sizeof(vis));
cin>>n>>m>>k>>x>>y>>d;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>mp[i][j];
mp[x][y]='@';
for(int i=1;i<=k;i++){
int fx=x+dx[d];
int fy=y+dy[d];
if(fx>0 && fx<=n && fy>0 && fy<=m && mp[fx][fy]!='x'){
x=fx;
y=fy;
mp[x][y]='@';
}
else d=(d+1)%4;
}
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(mp[i][j]=='@') sum++;
cout<<sum<<endl;
}
return 0;
}
求关
by cc_tcpt @ 2025-01-08 17:06:59
因为你是直接用当前位置加方向去判断,所以你的a数组是需要复位的,如果a数组没有复位有可能导致上一次数组会影响下一次的