70分求救!!!(#1 #2#3 WA)

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

d13599385212 @ 2023-07-15 16:02:21

#include<iostream>
#include <cstdio>
using namespace std;
int main(){ 
    int a,b,c=0,y;
    int a2[20000]={0};          
    int a3[2][1000];    
    scanf("%d%d",&a,&b);
    for(int i=0;i<b;i++)
    {
        scanf("%d%d",&a3[0][i],&a3[1][i]);
    }
    for(int i=1;i<=b;i++)
    {
        for(int k=0;k<b;k++)
        {
            for(int j=a3[0][k];j<=a3[1][k];j++)
            {
                a2[j]=1;
            }
        }

    }
    for(int i=0;i<a;i++)
    {
        if(a2[i]==1)c++;    
    }
    y=a+1-c;
    printf("%d",y);      
    return 0;
    }

by xixisuper @ 2023-07-15 16:22:08

@d13599385212 有几个问题

其一,中间的三层循环最外面一层完全不需要,直接去掉即可

其二,可能种树的范围的下标是 0 到你程序中的 a ,但你统计 c 的那个循环是从 0a-1 ,少了一个,应把

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

改为

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

by xixisuper @ 2023-07-15 16:22:46

@d13599385212 AC 代码:

#include<iostream>
#include <cstdio>
using namespace std;
int main(){ 
    int a,b,c=0,y;
    int a2[20000]={0};          
    int a3[2][1000];    
    scanf("%d%d",&a,&b);
    for(int i=0;i<b;i++)
    {
        scanf("%d%d",&a3[0][i],&a3[1][i]);
    }
    for(int k=0;k<b;k++)
    {
        for(int j=a3[0][k];j<=a3[1][k];j++)
        {
            a2[j]=1;
        }
    }
    for(int i=0;i<=a;i++)
    {
        if(a2[i]==1)c++;    
    }
    y=a+1-c;
    printf("%d",y);      
    return 0;
    }

by O_0node @ 2023-07-17 10:11:34

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

这样也行


|