CN0202deXP @ 2024-11-17 02:26:19
前两点tle后两点wa其余ac
#include <bits/stdc++.h>
using namespace std;
int s[10]={1,0,-1,0,0,1,0,-1};
char maps[1004][1004];
bool chk[1004][1004];
void slove(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
int n,m,k,x,y,d;
int i,j;
int ans=1;
memset(maps,'x',sizeof(maps));
memset(chk,false,sizeof(chk));
cin>>n>>m>>k;
cin>>x>>y>>d;
chk[y][x]=true;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>maps[j][i];
}
}
for(j=y,i=x;k>0;k--){
while(maps[j+s[d]][i+s[d+4]]=='x'){
d=(d+1)%4;
k--;
}
j+=s[d];
i+=s[d+4];
if(chk[j][i]==false){
chk[j][i]=true;
ans++;
}
}
cout<<ans<<'\n';
return;
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
int n;
cin>>n;
for(int i=0;i<n;i++){
slove();
}
return 0;
}
by wangshengchen @ 2024-11-17 08:22:51
@CN0202deXP
#include<iostream>
using namespace std;
const int N=1e3+10;
int t,n,m,k,x,y,d,ans,d2[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//d是方向
string s;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>t;
while(t--){
cin>>n>>m>>k>>x>>y>>d;
char map[N][N]={};
bool vis[N][N]={};
for(int i=1;i<=n;i++){
cin>>s;//用字符串输入快
int len=s.size();
for(int j=0;j<len;j++) map[i][j+1]=s[j];//存到字符数组里
}
ans=1;//起点也有一步
vis[x][y]=1;//判断走过的(可能有重复的)
while(k--){
int nx=d2[d][0]+x,ny=d2[d][1]+y;//现在的x,y坐标
if(nx>0&&nx<n+1&&ny>0&&ny<m+1&&map[nx][ny]!='x'){//判断可不可以走
x=nx;
y=ny;
if(!vis[nx][ny]){//加个数
vis[nx][ny]=1;
ans++;
}
}
else d=(d+1)%4;
}
cout<<ans<<"\n";
}
return 0;
}
by wangshengchen @ 2024-11-17 08:25:07
@CN0202deXP
else d=(d+1)%4;//转向
by CN0202deXP @ 2024-11-17 23:51:17
@wangshengchen 谢谢佬(双手合十)
by wangshengchen @ 2024-11-18 16:53:09
@CN0202deXP 求关