蒟蒻求助!!!!

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

paulyang120 @ 2022-12-05 16:33:08


#include<bits/stdc++.h>
using namespace std;
int main()
{
    int l,m;
    cin>>l>>m;
    int n[l+1],a[m*2];
    for(int i=0;i<m*2;i++)
        cin>>a[i];
    for(int i=1;i<=3;i++)
    {       
        for(int j=a[i*2-2];i<=a[i*2-1];i++)
        {
            if(n[j]==0)
                n[j]==1;
        }
    }
    int x=0;
    for(int i=0;i<=500;i++)
    {
        if(n[i]==1)
            x+=1;
    }
    cout<<x;
} 

by paulyang120 @ 2022-12-05 16:33:52

为什么我输出全错了?


by xlpri @ 2022-12-05 16:50:25

倒数第7行是

for(int i=0;i<=l;i++)

不是

for(int i=0;i<=500;i++)

by xlpri @ 2022-12-05 16:57:05

还有,双层循环内可以边输入边操作,大大降低时间复杂度

再还有,这个是否有树(就是你的数组n)可以用bool类型,不需要

if(n[j]==0)
    n[j]==1;

(上面怎么是n[j]==1 ???

而成了

n[j]=false

最后统计个数的时候就成了

for(int i=0;i<=l;i++)
{
    if(n[i])
        x+=1;
}

by Kevin_Mamba @ 2022-12-05 17:02:24

建议 数组写在主函数外


by xlpri @ 2022-12-05 17:04:13

(我不信你没有TLE

这是我当时写的代码

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int l,m;
    cin >> l >> m;
    bool bol[l + 1];
    memset(bol,true,sizeof(bol));
    for(int i = 0;i < m;i++)
    {
        int u,d;
        cin >> u >> d;
        for(int j = u;j <= d;j++)
        {
            bol[j] = false;
        }
    }

    int num = 0;
    for(int i = 0;i <= l;i++)
    {
        if(bol[i])
            num++;
    }
    cout << num;
    return 0;
}

这是我当时写的,其中memset就是初始化,和下面的代码段是一样的

for(int i = 0;i <= l;i++)
{
    bol[i] = true;
}

by xlpri @ 2022-12-05 17:04:44

@yangzhengxi


by paulyang120 @ 2022-12-05 17:16:06

谢谢各位大佬我AC了


|