C++九十分求助

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

fus0618 @ 2023-07-09 18:08:07


```cpp
#include<iostream>
using namespace std;
#include<cstring>
int main()
{
    int a,b,l,j,m,c,cot=0;
    cin>>l>>m;
    int arr[10000];
    memset(arr,1,sizeof(arr));
    for(int i=1;i<=m;i++)
    {
        cin>>a>>b;
        for(j=a;j<=b;j++)
        {
            arr[j]=0;
        }
    }
    for(int i=0;i<=l;i++)
    {
        if(arr[i]!=0)
        {
            cot++;
        }
    }
    cout<<cot;
    return 0;
}

by midsummer_zyl @ 2023-07-09 18:18:44

@fus0618

代码如下(思路与你大致相同):

#include <bits/stdc++.h>
using namespace std;
int s[1000010];
bool w[1000010];
int main() {
    int l, n, a, b, sum = 0;
    cin >> l >> n;
    for(int i = 1; i <= n; i++) {
        cin >> a >> b;
        for(int j = a; j <= b; j++) {
            if(w[j] == 0) {
                w[j] = 1;
            }
        }
    } 
    for(int i = 0; i <= l; i++) {
        if(w[i] == 0) {
            sum++;
        }
    }
    cout << sum;
    return 0;
}

by zhongboxuan123 @ 2023-07-09 18:54:30

@fus0618 你的memset有问题,memset只能赋3个值(我记得哈)-1,0,225不能赋1,你赋1之后整个数组都是乱的,后面你还写!=0肯定会炸,所以有两种改法,第一种就是把memset改成循环赋值,第二种就是把后面cot++的时候改成当arr[i] != 0时


by dawuzi @ 2023-07-11 15:23:02

@zhongboxuan123 牛!厉害!


|