两句等效的代码到底有何不同,为什么一个ac一个mle 多个点

P1434 [SHOI2002] 滑雪

Mogu @ 2018-06-07 23:00:29

for(int i = 0; i < 4; i++){
        int cx = x+dx[i],cy = y+dy[i];
        if(map[x][y] > map[cx][cy] && cx >= 0 && cx < r && cy >= 0 && cy < c){
            t = max(t,dfs(cx,cy)+1);
        }
    }

下面这个MLE

for(int i = 0; i < 4; i++){
        int cx = x+dx[i],cy = y+dy[i];
        if(map[x][y] < map[cx][cy] || cx < 0 || cx >= r || cx < 0 || cy >= c) continue;
        t = max(t,dfs(cx,cy)+1);
    }

cx 和 cy表示下一个要dfs的坐标,map存图


by Siyuan @ 2018-06-07 23:06:46

第一个是map[x][y] > map[cx][cy],那么第二个理应map[x][y] <= map[cx][cy]


by Mogu @ 2018-06-07 23:16:07

@siyuan 感谢大佬正解。我还以为有什么神秘力量


by 疯疯芸 @ 2018-06-08 07:39:39

开始怀疑你程序猿的身份


|