懵了,这几种写法不应该等价吗,各位佬麻烦看看

P1047 [NOIP2005 普及组] 校门外的树

pku_lmc @ 2023-10-20 00:24:21


#include <iostream>
using namespace std;
int main() {
    int l = 0, m = 0;
    cin >> l >> m;
    int ln[10000] = {0};
    int a, b, k = 0;
    //a,b为每次的首末,k用来计数
    for (int i = 1; i <= m; i++) {
        cin >> a >> b;
        for (; a <= b; a++) {
            ln[a] = 1;
        }
    }
    for (int j = 0; j <= l; j++) {
        if (ln[j] == 1) k += ln[j];
        //if (ln[j] == 1) k ++;
        //if (ln[j] != 0) k += ln[j];
        //k += ln[j];
    //这四种写法有什么区别,为什么只有第一种和第二种可以全部通过,其余两种写法只能通过前三个?
    }
    cout << l + 1 - k; 
    return 0;
}

by Lele_S @ 2023-10-20 02:13:29

数组小了,开到10001,前面两种写法正好能过可能是一个巧合


by Lele_S @ 2023-10-20 02:13:41

@pku_lmc


by 262620zzj @ 2023-10-20 06:52:02

数组越界


by sunxy20231016 @ 2023-10-20 08:04:04

前排


by 2789617221guo @ 2023-12-23 20:34:10

有可能是有的元素没有赋初值,即NULL,而NULL又正好不等于0,所以第三个是判断错误。 (本人也是个小蒟蒻,如果有说的不对的地方请谅解AWA)


|