Yzc10729 @ 2024-10-29 21:46:45
#include<bits/stdc++.h>
using namespace std;
char a[10001][10001];
set<int> mmap;
int main(){
int t;
cin>>t;
for(int p=1;p<=t;p++){
memset(a,0,sizeof a);
mmap.clear();
int n,m,k;
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];
}
}
int cnt=1;
mmap.insert(x*10+y);
for(int i=1;i<=k;i++){
if(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]=='.'){
if(d==1){
if(x+1<1||x+1>n||y<1||y>m||a[x+1][y]=='x'){
d=d+1;
d%=4;
}else{
x+=1;
cnt++;
int c=x*10+y;
mmap.insert(c);
}
}else if(d==2){
if(x<1||x>n||y-1<1||y-1>m||a[x][y-1]=='x'){
d=d+1;
d%=4;
}else{
y-=1;
cnt++;
int c=x*10+y;
mmap.insert(c);
}
}else if(d==3){
if(x-1<1||x-1>n||y<1||y>m||a[x-1][y]=='x'){
d=d+1;
d%=4;
}else{
x-=1;
cnt++;
int c=x*10+y;
mmap.insert(c);
}
}else if(d==0){
if(x<1||x>n||y+1<1||y+1>m||a[x][y+1]=='x'){
d=d+1;
d%=4;
}else{
y+=1;
cnt++;
int c=x*10+y;
mmap.insert(c);
}
}
}
}
cout<<mmap.size()<<endl;
}
return 0;
}
by _QyGyQ_ @ 2024-10-30 18:21:12
@Yzc10729 x*10+y
这个好像有点问题
by _QyGyQ_ @ 2024-10-30 18:23:51
@Yzc10729 我猜测您打算将 (x,y)
的坐标当成一个数处理,但是这样可能会出现问题。比如,两个坐标分别是 (10,11)
和 (11,1)
,分别会处理为 10*10+11=111
和 11*10+1=111
,两个不同坐标会被 set 去重
by Yzc10729 @ 2024-10-30 21:24:34
@QyGyQ 哦哦,谢谢提醒
by nyk1315 @ 2024-10-30 21:33:42
@Yzc10729 我也60 撞头像
#include<bits/stdc++.h>
using namespace std;
char a[1001][1001];
int main(){
int t;
cin>>t;
while(t--){
int n,m,k,x,y,d;
cin>>n>>m>>k;
cin>>x>>y>>d;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
int sum=1;
while(k--){
bool f=0;
a[x][y]='-';
if(d==0&&a[x][y+1]!='x'&&y+1<=m){
if(a[x][y+1]=='.')
sum++;
y++;
continue;
}
if(d==1&&a[x+1][y]!='x'&&x+1<=m){
if(a[x+1][y]=='.')
sum++;
x++;
continue;
}
if(d==2&&a[x][y-1]!='x'&&y-1>0){
if(a[x][y-1]=='.')
sum++;
y--;
continue;
}
if(d==3&&a[x-1][y]!='x'&&x-1>0){
if(a[x-1][y]=='.')
sum++;
x--;
continue;
}
d=(d+1)%4;
}
cout<<sum<<endl;
}
return 0;
}
by Yzc10729 @ 2024-10-30 22:58:28
@nyk1315 呵呵,我AC了