更简单的方式,但90分

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

laoniubi @ 2024-12-21 10:47:40

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a,b,f,r,l=0;
    cin>>a>>b;
    int d[a+1];
    for(int i=0;i<=a+1;i++){
        d[i]=i;
    }
    for(int i=1;i<=b;i++){
        cin>>f>>r;
        for(int j=f;j<=r;j++){
            d[j]=0;
        }
    }
    for(int i=0;i<=a+1;i++){
        if(d[i]!=0){
            l+=1;
        }
    }
    cout<<l;
}

相对来说更简单好理解,但第一个测试点不对


by guxiaoqing @ 2024-12-22 20:04:13

@laoniubi 1.因为你这个d[0]=0并且标记为0。所以其实第一棵树在你这默认被砍了,所以要换个标记数字 2.题目说的是0-L而不是0-l+1,所以不用+1

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a,b,f,r,l=0;
    cin>>a>>b;
    int d[a+1];
    for(int i=0;i<=a;i++){
        d[i]=i;
    }
    for(int i=1;i<=b;i++){
        cin>>f>>r;
        for(int j=f;j<=r;j++){
            d[j]=-1;
        }
    }
    for(int i=0;i<=a;i++){
        if(d[i]!=-1){
            l+=1;
        }
    }
    cout<<l;
}

by guxiaoqing @ 2024-12-22 20:06:02

加油,少年 ~求关~


by laoniubi @ 2024-12-23 21:18:38

@guxiaoqing 所以可以把b[i]=i换成b[i]=1

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a,b,f,r,l=0;
    cin>>a>>b;
    int d[a+1];
    for(int i=0;i<=a;i++){
        d[i]=1;
    }
    for(int i=1;i<=b;i++){
        cin>>f>>r;
        for(int j=f;j<=r;j++){
            d[j]=0;
        }
    }
    for(int i=0;i<=a;i++){
        if(d[i]!=0){
            l+=1;
        }
    }
    cout<<l;
}

已关


by xsy5201314love @ 2024-12-26 16:03:18

241


|