70分前3个全WA大佬求助

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

LLX7 @ 2024-01-22 20:28:42

#include<bits/stdc++.h>
using namespace std;
int main(){
    int l,m;
    scanf("%d %d",&l,&m);
    int a[10000000],u[10000000],v[10000000];
    for(int i=0;i<l;i++){
        a[i]=0;
    }
    for(int i=0;i<m;i++){
        scanf("%d %d",&u[i],&v[i]);
    }
    for(int i=0;i<m;i++){
        for(int j=u[i];j<=v[i];j++){
            if(a[j]==0) a[j]=1;
        }
    }
    int sum=0;
    for(int i=0;i<l;i++){
        if(a[i]==0) sum++;
    }
    printf("%d",sum+1);
    return 0;
}

@liuyize549330 @huolechegan


by hjw100516 @ 2024-01-22 20:41:59

@LLX7

题目交代了,从0到l都有树,所以在初始化时应该初始到a[l]而不是a[l-1],所以在后面判断还剩几棵树时,是从0枚举到l,输出也不需要加1

```cpp

include<bits/stdc++.h>

using namespace std; int main(){ int l,m; scanf("%d %d",&l,&m); int a[10000000],u[10000000],v[10000000]; for(int i=0;i<=l;i++){ a[i]=0; } for(int i=0;i<m;i++){ scanf("%d %d",&u[i],&v[i]); } for(int i=0;i<m;i++){ for(int j=u[i];j<=v[i];j++){ if(a[j]==0) a[j]=1; } } int sum=0; for(int i=0;i<=l;i++){ if(a[i]==0) sum++; } printf("%d",sum); return 0; }


最终代码如下

by FarmerDrone @ 2024-01-22 20:42:30

sum+1肯定有问题 你这样就算把所有树都移了还会输出1


by Dream_Creator @ 2024-01-22 20:42:33

@LLX7

#include<bits/stdc++.h>
using namespace std;
int main(){
    int l,m;
    scanf("%d %d",&l,&m);
    int a[10000000],u[10000000],v[10000000];
    for(int i=0;i<=l;i++){
        a[i]=0;
    }
    for(int i=0;i<m;i++){
        scanf("%d %d",&u[i],&v[i]);
    }
    for(int i=0;i<m;i++){
        for(int j=u[i];j<=v[i];j++){
            if(a[j]==0) a[j]=1;
        }
    }
    int sum=0;
    for(int i=0;i<=l;i++){
        if(a[i]==0) sum++;
    }
    printf("%d",sum);
    return 0;
}

注意是区间 [0,l](两端闭区间)


by hjw100516 @ 2024-01-22 20:43:01

@LLX7

刚刚发错了,再发一遍

#include<bits/stdc++.h>
using namespace std;
int main(){
    int l,m;
    scanf("%d %d",&l,&m);
    int a[10000000],u[10000000],v[10000000];
    for(int i=0;i<=l;i++){
        a[i]=0;
    }
    for(int i=0;i<m;i++){
        scanf("%d %d",&u[i],&v[i]);
    }
    for(int i=0;i<m;i++){
        for(int j=u[i];j<=v[i];j++){
            if(a[j]==0) a[j]=1;
        }
    }
    int sum=0;
    for(int i=0;i<=l;i++){
        if(a[i]==0) sum++;
    }
    printf("%d",sum);
    return 0;
}

by luoguxiaobai @ 2024-01-23 09:07:26

@LLX7 ```c

include<stdio.h>

int main() { int m, n; scanf("%d%d", &m, &n); int sc[1001] = { 0 }; int a, b; for (int i = 1; i <= n; ++i) { scanf("%d%d", &a, &b); for (int j = a; j <= b; ++j) { sc[j] = 1; } } int cnt = 0; for (int i = 1; i <= m+1; ++i) { if(sc[i]==0)cnt++; } printf("%d", cnt); return 0; }


|