调试一中午还是只绿了一个!大佬救救我吧!

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

luogu3213 @ 2023-06-05 12:18:57


#include <stdio.h>
long l[10000],m,L;
long cnt=0;
int main() {
for(long i=0;i<10000;i++)
l[i]=1;
scanf("%ld%ld\n",&m,&L);
for(int i=1;i<=m;i++)
    {
        long head,tail;
        scanf("%ld%ld\n",&head,&tail);
        for(int j=head;j<=tail;j++)
            if(l[j]==1)
                l[j]=0;
    }
for(int i=0;i<L;i++)
        if(l[i]==1)
            cnt++;
    printf("%ld",cnt); 

    return 0;

}

by Steve_xh @ 2023-06-05 12:40:11

最后一个 for 为啥直到 L 啊?应该改成 for(int i=0;i<10000;i++)


by Steve_xh @ 2023-06-05 12:42:15

@luogu3213 你的 L 存的是有多少段,但是你的 l[] 数组是按下标来存的


by luogu3213 @ 2023-06-05 12:45:34

@Steve_xh 因为不一定有10000棵树啊!如果我输入L棵树 那就只有for(int i=0;i<L;i++)了啊


by OURUO @ 2023-06-05 12:47:13

我这样写绿3个

#include <bits/stdc++.h>
using namespace std; 
int main() {
    int a[100001];
    int l,m;
    cin>>l>>m;
    int u,v;
    int sum;
    for(int i=0;i<l;i++){
        a[i]=1;
    }
    while(m!=0){
        cin>>u>>v;
        for(int i=u;i<=v;i++){
            a[i]=0;
        }
        m--;
    }
    for(int i=0;i<l;i++){
        if(a[i]!=0){
            sum++;
        }
    }
    cout<<sum<<endl;
    return 0;

}

by luogu3213 @ 2023-06-05 12:49:56

@OURUO for(int i=0;i<l;i++)改成 for(int i=0;i<=l;i++)


by OURUO @ 2023-06-05 12:53:35

@luogu3213 绿绿的一片……


by Steve_xh @ 2023-06-05 13:23:58

@luogu3213 你还没懂?你的数组存的是每一米有没有树,怎么可能最多才L米呢?要把整一段都遍历呀


by Steve_xh @ 2023-06-05 13:24:53

@luogu3213 你改了之后看看有没有对先吧!


|