数据8,9的结果是WA

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

lizao @ 2023-09-28 20:50:22


#include <stdio.h>
int main()
    {
    int all,n,arr[200][200],max,min;
    scanf("%d",&all);//输入所有树的棵数
    all+=1;
    scanf("%d",&n);//输入给与的路的行数
    for(int i=1;i<=n;i++)//用数组记录每段公路的起始位置点和结束位置点
    {
    scanf("%d",&arr[i][1]);//记录起始位置点
      scanf("%d",&arr[i][2]);//记录结束位置点

    }
    max=arr[1][2],min=arr[1][1];
    for(int i=1;i<=n;i++)//遍历数组,找出公路的最大通集部分
    {
        if ( (arr[i][2]>=max)&&(arr[i][1]>=min)&&(arr[i][1]<max) )//第一种出现交集的情况
        {
        max=arr[i][2];
        }
        else if( (arr[i][2]<=max)&&(arr[i][1]<min) &&(arr[i][2]>min) )//第二种出现交集合的情况
        {
        min=arr[i][1];
        }

    }
    for(int i=1;i<=n;i++)//找出没有交集的公路的部分的树并用总树的量减去
    {
    if ( (arr[i][2]<min)||(arr[i][1]>max) )
        {
        all=all-arr[i][2]+arr[i][1]-1;
        }
    }
    all=all-max+min-1;//用总树的量再次减去通集的树的数量
    printf("%d",all);
    return 0;    
}
```8,9是WA其他的都通过了,希望能帮我看看有什么问题

by liujiahao604 @ 2023-09-28 21:20:47

https://www.luogu.com.cn/record/124916598


by chenxizhe2 @ 2023-10-02 17:06:01

我这么做满分,用一个循环嵌套就好。


#include<bits/stdc++.h>
using namespace std;
bool treel[100005];//0 没被砍   1 砍完了 
int l,u,v,m,s;// 路长l,m 地铁数量 u 起点 v终点。 
int main(){
    cin>>l>>m;
    for(int i=1;i<=m;i++){
        cin>>u>>v;
        for(int j=u;j<=v;j++){
            treel[j]=1;
        }
    }
    for(int i=0;i<=l;i++){
        if(treel[i]==0) s++;
    }
    cout<<s;
} 

|