警示后人:注意多测清空(本人T2就是多测把vis定义在了main里面没清零爆0的)
原本代码:
#include<bits/stdc++.h>
using namespace std;
int T;
int main(){
freopen("explore.in","r",stdin);
freopen("explore.out","w",stdout);
cin>>T;
while(T--){
int n,m,k;
cin>>n>>m>>k;
int x,y,d;
cin>>x>>y>>d;
bool a[1005][1005];
bool b[1005][1005];
b[x][y]=1;
int step=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char tp;
cin>>tp;
if(tp=='x') a[i][j]=1;
else a[i][j]=0;
}
}
int nx,ny;//continue
for(int i=0;i<k;i++){
if(d==0) nx=x,ny=y+1;
else if(d==1) nx=x+1,ny=y;
else if(d==2) nx=x,ny=y-1;
else if(d==3) nx=x-1,ny=y;
if(1<=nx&&nx<=n&&1<=ny&&ny<=m&&a[nx][ny]==0){
x=nx;
y=ny;
b[x][y]=1;
}
else{
d=(d+1)%4;
b[x][y]=1;
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(b[i][j]==1) ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
记录详情 - 洛谷 | 计算机科学教育新生态
因为是多测,就想着把变量定义在while里面,结果忘记清空了
就加上清空,
#include<bits/stdc++.h>
using namespace std;
int T;
int main(){
freopen("explore.in","r",stdin);
freopen("explore.out","w",stdout);
cin>>T;
while(T--){
int n,m,k;
cin>>n>>m>>k;
int x,y,d;
cin>>x>>y>>d;
bool a[1005][1005];
bool b[1005][1005];
b[x][y]=1;
int step=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char tp;
cin>>tp;
if(tp=='x') a[i][j]=1;
else a[i][j]=0;
b[i][j]=0;<-----------------------------------清空就是这一句
}
}
b[x][y]=1;
int nx,ny;//continue
for(int i=0;i<k;i++){
if(d==0) nx=x,ny=y+1;
else if(d==1) nx=x+1,ny=y;
else if(d==2) nx=x,ny=y-1;
else if(d==3) nx=x-1,ny=y;
if(1<=nx&&nx<=n&&1<=ny&&ny<=m&&a[nx][ny]==0){
x=nx;
y=ny;
b[x][y]=1;
}
else{
d=(d+1)%4;
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(b[i][j]==1) ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
自己用CCF 官方数据测下来的结果
记录详情 - 洛谷 | 计算机科学教育新生态
就 AC 了