milai @ 2024-10-30 20:13:40
这位蒟蒻在考场的代码差不多是这样的(70pts)
#include<bits/stdc++.h>
using namespace std;
int xt[5]={0,1,0,-1};
int yt[5]={1,0,-1,0};
char mp[1145][1145];
bool b[1145][1145];
int main(){
int T,n,m,k,x,y,d,xto,yto;
cin>>T;
while(T--){
memset(b,0,sizeof(b));
cin>>n>>m>>k>>x>>y>>d;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
}
}
b[x][y]=1;
for(int i=1;i<=k;i++){
xto=x+xt[d],yto=y+yt[d];
while(mp[xto][yto]!='.'||xto<1||yto<1||xto>n||yto>m){
d=(d+1)%4;
xto=x+xt[d],yto=y+yt[d];
// cout<<xto<<' '<<yto<<"\n";
i++;
}
b[xto][yto]=1;
x=xto,y=yto;
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
ans+=b[i][j];
}
}
cout<<ans<<'\n';
}
return 0;
}
by milai @ 2024-10-30 20:15:03
然后自测70,两个TLE,一个WA
by czcxyxhycwzy @ 2024-10-30 20:19:01
@milai memset的时间很大,不建议在循环内使用
by milai @ 2024-10-30 20:19:35
o
by __log__ @ 2024-10-30 20:19:52
@milai 哥,看题啊
转向也算一次操作
你样例应该要测出来的啊
by goIdie @ 2024-10-30 20:20:02
@milai 根memset没关系
by milai @ 2024-10-30 20:20:22
e没用捏
by __log__ @ 2024-10-30 20:21:09
我傻了,应该要加个转向后超过k次操作直接结束
by milai @ 2024-10-30 20:21:12
我是说memset改循环没用
by goIdie @ 2024-10-30 20:21:30
@milai 当n或m很小且k比较大时while会死循环
by milai @ 2024-10-30 20:21:32
@log ?。。。!