TLE?!

P11228 [CSP-J 2024] 地图探险

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 ?。。。!


| 下一页