lizechenQAQ @ 2024-11-23 21:30:27
AC代码:
#include<bits/stdc++.h>
using namespace std;
int t;
int main(){
cin>>t;
while(t--){
char mapss[1001][1001]={};
long long n,m,k,dx,dy,d,ans;
cin>>n>>m>>k>>dx>>dy>>d;
bool maps[1001][1001]={};
maps[dx][dy]=true;
ans=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>mapss[i][j];
while(k--){
long long ddx=dx,ddy=dy;
if(d==0) dy++;
if(d==1) dx++;
if(d==2) dy--;
if(d==3) dx--;
if(dx<1||dx>n||dy<1||dy>m||mapss[dx][dy]=='x'){
dx=ddx,dy=ddy;
d=(d+1)%4;
}
else if(!maps[dx][dy]){
ans++;
maps[dx][dy]=true;
}
}
cout<<ans<<endl;
}
return 0;
}
50pts代码:
#include<bits/stdc++.h>
using namespace std;
int t;
int main(){
cin>>t;
while(t--){
char mapss[1001][1001]={};
long long n,m,k,dx,dy,d,ans;
cin>>n>>m>>k>>dx>>dy>>d;
bool maps[1001][1001]={};
ans=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>mapss[i][j];
while(k--){
long long ddx=dx,ddy=dy;
if(d==0) dy++;
if(d==1) dx++;
if(d==2) dy--;
if(d==3) dx--;
if(dx<1||dx>n||dy<1||dy>m||mapss[dx][dy]=='x'){
dx=ddx,dy=ddy;
d=(d+1)%4;
}
else if(!maps[dx][dy]){
ans++;
maps[dx][dy]=true;
}
}
cout<<ans<<endl;
}
return 0;
}
这两段代码之间就差了个
maps[dx][dy]=true;
结果相差50分,为什么?
by HZHDCM @ 2024-11-23 21:38:55
有时候在走的时候并不会回到一开始的点,所以会导致答案少了@lizechenQAQ
by wyz0326 @ 2024-11-23 21:39:49
鄙人考场上血的教训 这个题意里面有一种可能就是说有重复的点,但计数只能记一次,所以要加一个去重 我就因为这个丢分了,本来能干250+,(哭泣);
by lizechenQAQ @ 2024-11-23 21:40:32
OK,本蒟蒻已理解,此贴结