Dannylxy2012 @ 2024-10-26 18:05:12
考场上样例全过,在家打出错了,大体是这样,dfs有问题,没超
#include<bits/stdc++.h>
using namespace std;
int n,m,k,t;
char a[1005][1005];
int fx[5]={0,1,0,-1};
int fy[5]={1,0,-1,0};
void dfs(int x,int y,int d,int p,int tu){
a[x][y]='@';
if(p==k||tu==4){
return ;
}
int tx=x+fx[d];
int ty=y+fy[d];
if(a[tx][ty]=='.') dfs(tx,ty,d,p+1,0);
else if(a[tx][ty]=='@') dfs(tx,ty,d,p+1,0);
else dfs(x,y,(d+1)%4,p,tu+1);
}
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n>>m>>k;
int x,y,d;
cin>>x>>y>>d;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
dfs(x,y,d,0,0);
int sum=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='@'){
sum++;
}
}
}
cout<<sum<<endl;
}
return 0;
}
by T7_C24_JSD_78 @ 2024-10-26 18:12:00
我在考场上模拟的; 为什要用dfs? 其实这道题就是大模拟
by HFZ20111110 @ 2024-10-26 18:12:13
@Dannylxy2012 我是用模拟,好像没必要dfs
by xu_duo @ 2024-10-26 18:14:18
这道题是模拟啊。。。
考场上第一眼dfs,第二眼dp,第三眼模拟(悲
by T7_C24_JSD_78 @ 2024-10-26 18:24:28
@Dannylxy2012
#include<bits/stdc++.h>
using namespace std;
char a[1005][1005];
int n,m,t,k,kkk,b[1005][1005],e,c[4][4],x,y,d;
int main() {
cin>>t;
c[0][1]=0,c[0][2]=1;
c[1][1]=1,c[1][2]=0;
c[2][1]=0,c[2][2]=-1;
c[3][1]=-1,c[3][2]=0;
while(t--){
cin>>n>>m>>k>>x>>y>>d;
kkk=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];b[i][j]=0;
}
}
b[x][y]++;
for(int i=1;i<=k;i++){
x+=c[d][1],y+=c[d][2];
if(x>n or y>m or x<1 or y<1 or a[x][y]=='x'){
x-=c[d][1],y-=c[d][2];
d=(d+1)%4;
}
else b[x][y]++;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(b[i][j]!=0) kkk++;
}
}
cout<<kkk<<endl;
}
return 0;
}
这是我打的模拟,虽然难看,但是好歹A了
by Dannylxy2012 @ 2024-10-26 18:33:55
谢谢,请问我的code还有救吗?0-0
by Cloke0 @ 2024-10-26 18:34:28
暴力也能满分
#include<bits/stdc++.h>
using namespace std;
int T,n,m,k,x,y,d;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&k);
getchar();
scanf("%d%d%d",&x,&y,&d);
char c[n+1][m+1];
int v[n+1][m+1]={},ans=0;
for(int i=1;i<=n;i++){
scanf("%s",&c[i]);
}
v[x][--y]=1;
while(k--){
int nx,ny;
if(d==0){nx=x,ny=y+1;}
if(d==1){nx=x+1,ny=y;}
if(d==2){nx=x,ny=y-1;}
if(d==3){nx=x-1,ny=y;}
if(c[nx][ny]=='x'||nx<1||nx>n||ny<0||ny>=m){
d=(d+1)%4;
}
else{
x=nx,y=ny;
v[x][y]=1;
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++){
if(v[i][j])ans++;
}
}
printf("%d\n",ans);
}
return 0;
}
by Zhangneng @ 2024-10-26 19:06:05
我们老师跟我说这题是广度优先搜索?!!
by Zhangneng @ 2024-10-26 19:10:29
@Cloke0 你这个不就是模拟吗
by guimei121212 @ 2024-10-26 19:24:40
@xu_duo 可惜第3题DP我没时间思考了了(第一题写半天才发现我没写读入。。。)