解题思路:删去所以车段的交集,每个车段需要“砍树”为:(末-起+1),原本可以植树总共为 :(l+1),结果是:(总-砍)

注意事项:


参考代码:

#include<stdio.h>
#define M 100
int main()
{int l,m,a[M],b[M],tree=0;//l表示长度,m表示条数,a[],b[]分别保存站台起始坐标
 int i,j;
 scanf("%d%d",&l,&m);
 tree=l+1;//建设车站前树数量
 for(i=0;i<m;i++)
     scanf("%d%d",&a[i],&b[i]);
 
 for(i=0;i<m-1;i++)//每个车间段与其他段比较(有交集就删除交集)
     {for(j=i+1;j<m;j++)
         {if((a[j]>=a[i]&&b[j]<=b[i]))//1包含于( 后包含于前
             {a[j]=0;b[j]=0;//真包含的部分置0  
            }
         else if((a[j]<=a[i]&&b[j]>=b[i]))//1或前包含于后,)
             {a[i]=0;b[i]=0;break;
             }
         else if(a[j]<=b[i]&&b[j]>b[i])//3有靠右的交集
             {a[j]=b[i]+1;//去掉与前一个区域交集
            }
         else if(b[j]>=a[i]&&a[j]<a[i])//4有靠左的交集
             {b[j]=a[i]-1;//去掉与前一个区域交集
            }
        }
    }
for(i=0;i<m;i++)
    {if(a[i]!=b[i])//即被其他车段包含的部分不参与计算
        tree=tree-(b[i]-a[i]+1);
    }

 printf("%d",tree);
}

点赞(3)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论