求助求助,能运行,但答案差挺多的,想知道逻辑上哪有问题

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

ou_yang_ @ 2023-12-08 11:41:39

#include<stdio.h>
int main(void)
{
    int l, m, i, j;
    scanf("%d %d", &l, &m);//确定树量与地铁量
    int k[10000];
    for (i = 0; i < 10000; i++)//种树
    {
        k[i] = 1;
    }
    int x[200];
    for (i = 0; i < m; i++)//存储所有地铁区间
    {
        scanf("%d %d", &x[2 * i], &x[2 * i + 1]);
    }
    for (i = 0; i < m; i++)//拔树
    {
        for (j = x[2 * i]; j <= x[2 * i + 1]; j++)  
        {
            k[j] = 0; // 将树变为非树  
        }

        int cnt = 0;
        for (i = 0; i <= l; i++)//统计树量
        {
            if (k[i] == 1)
                cnt++;
        }
        printf("%d", cnt);
        return 0;
    }
}

by nightwatch.ryan @ 2023-12-08 22:04:33

#include<iostream>
int l,m,u,v;
int a[10005];
int main(){
    std::cin>>l>>m;
    for(int i=1;i<=m;i++){
        std::cin>>u>>v;
        for(int j=u;j<=v;j++){
            a[j]=-1;
        }
    }
    int res=0;
    for(int i=0;i<=l;i++){
        if(a[i]!=-1){
            res++;
        } 
    }
    std::cout<<res;
}

你可以参考一下


by Kelly_1 @ 2024-01-04 20:49:34

#include<stdio.h>
int main()
{
    int l = 0, m = 0;
    scanf("%d %d", &l, &m);
    int a[10000] = { 0 };
    int i = 0;
    for (i = 0;i <= l;i++)
    {
        a[i] = 1;
    }
    int u = 0, v = 0;
    for (i = 0;i < m;i++)
    {
        scanf("%d %d", &u, &v);
        for (int j = u;j <= v;j++)
        {
            a[j] = 0;
        }
    }
    int ret = 0;
    for (i = 0;i <= l;i++)
    {
        ret = ret + a[i];
    }
    printf("%d\n", ret);
    return 0;
}

|