Raymond2014 @ 2024-11-10 09:16:49
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
//freopen("explore.in","r",stdin);
//freopen("explore.out","w",stdout);
int t;
cin>>t;
while(t--){
int n,m,k,x,y,d,cnt=1;
cin>>n>>m>>k>>x>>y>>d;
int a[1001][1001]={},vis[1001][1001]={};
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c;
cin>>c;
if(c=='x') a[i][j]=1;
}
}
for(int i=1;i<=k;i++){
if(x<=0 || x>n || y<=0 || y>m || a[x][y]==1) d=(d+1)%4;
if(d==0){
if(a[x][y+1]==0 && x<=n && x>0 && y<=m && y>0) y++;
else d=(d+1)%4;
}
if(d==1){
if(a[x+1][y]==0 && x<=n && x>0 && y<=m && y>0) x++;
else d=(d+1)%4;
}
if(d==2){
if(a[x][y-1]==0 && x<=n && x>0 && y<=m && y>0) y--;
else d=(d+1)%4;
}
if(d==3){
if(a[x-1][y]==0 && x<=n && x>0 && y<=m && y>0) x--;
else d=(d+1)%4;
}
if(a[x][y]==0 && x<=n && x>0 && y<=m && y>0 && vis[x][y]==0) cnt++,vis[x][y]=1;
}
cout<<cnt<<endl;
}
return 0;
}
那位大神能帮我看一下?谢谢!
by liujiyu2013 @ 2024-11-10 11:22:04
@Raymond2014 while循环中,1~n的循环与1~k的循环的中间要加一个
vis[x][y]=1;
for循环里(1~k的循环)if语句判断d的值时需要用else if。(此时能拿60分)
剩下的40分好像cnt少了1。
我的AC Code:
#include<bits/stdc++.h>
using namespace std;
int vis[1005][1005];
char a[1005][1005];
bool check(int x,int y,int n,int m){
return x>=1 && x<=n && y>=1 && y<=m && a[x][y]=='.';
}
int main(){
//freopen("explore.in","r",stdin);
//freopen("explore.out","w",stdout);
int T;
cin>>T;
while(T--){
int n,m,k;
cin>>n>>m>>k;
memset(vis,0,sizeof vis);
int ans=1;
int x,y,d;
cin>>x>>y>>d;
vis[x][y]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
while(k-->0){
int mx,my;
if(d==0){
my=y+1;
mx=x;
}
if(d==1){
my=y;
mx=x+1;
}
if(d==2){
my=y-1;
mx=x;
}
if(d==3){
my=y;
mx=x-1;
}
if(check(mx,my,n,m)){
x=mx;
y=my;
if(vis[x][y]==0)ans++;
vis[x][y]=1;
}
else{
d=(d+1)%4;
}
}
cout<<ans<<"\n";
}
return 0;
}
by liujiyu2013 @ 2024-11-10 20:51:26
@Raymond2014 后来又看了一下,d为0,1,2,3,里的if语句要改一下: (你的代码修改)
#include <bits/stdc++.h>
using namespace std;
int a[1005][1005]={},vis[1005][1005]={};/*记得多开点,1001会RE*/
int main(){
//freopen("explore.in","r",stdin);
//freopen("explore.out","w",stdout);
int t;
cin>>t;
while(t--){
int n,m,k,x,y,d,cnt=1;
cin>>n>>m>>k>>x>>y>>d;
memset(a,0,sizeof a);
memset(vis,0,sizeof vis);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c;
cin>>c;
if(c=='x') a[i][j]=1;
else a[i][j]=0;
}
}
vis[x][y]=1;/*改动*/
while(k--){
int g=d;
if(g==0){
if(a[x][y+1]==0 && x<=n && x>0 && y+1/*改动*/<=m && y>0) y++;
else d=(d+1)%4;
}
else if(g==1){
if(a[x+1][y]==0 && x+1/*改动*/<=n && x>0 && y<=m && y>0) x++;
else d=(d+1)%4;
}
else if(g==2){
if(a[x][y-1]==0 && x<=n && x>0 && y<=m && y-1/*改动*/>0) y--;
else d=(d+1)%4;
}
else if(g==3){
if(a[x-1][y]==0 && x<=n && x-1/*改动*/>0 && y<=m && y>0) x--;
else d=(d+1)%4;
}
if(vis[x][y]==0) cnt++,vis[x][y]=1;
}
cout<<cnt<<endl;
}
return 0;
}