C++Photo[USACO-2013-USOpen-B]

Photo[USACO-2013-USOpen-B]

题目描述
Farmer John想给他的N(2≤N≤1000000000)头奶牛拍照,奶牛们排成一排,编号为1到N。每张照片都能拍摄到队列中连续的部分奶牛,而且FJ希望最终每头奶牛都至少在一张照片中出现过。
遗憾的是,有K(1≤K≤1000)对不友好的奶牛,其中的每对奶牛拒绝出现在同一张照片中。

给出这K对不友好的奶牛,请帮助FJ计算一下,他至少要拍摄多少张照片。

输入格式
第一行,两个整数N和K
接下来K行,每行两个整数A_i和B_i,表示位置分别为A_i和B_i的两头奶牛不友好,拒绝出现在同一张照片中。

输出格式
一行,一个整数,表示为了达成拍摄目标,FJ需要最少拍摄多少张照片

输入输出样列
输入样例1:
7 3
1 3
2 4
5 6
输出样例1:
3
说明
样例说明:
FJ需要拍摄3张照片:
照片1,从1到2
照片2,从3到5
照片3,从6到7

【耗时限制】1000ms 【内存限制】128MB
解题思路
如果要保证Ai与Bi不在一张照片中,也就是Ai到Bi是不能连续,Ai和Bi之间要有断点。
如果在片段Ai到Bi之间增加一个断点,那么照片的数量就会增加1,要想使得照片的数量尽量的少,所以我们的断点要尽量的少
问题转化为,选择尽量少的点,使得每个区间内至少有一个断点,也就是区间选点问题
1.先按照右端点从小到大排序
2.第一个区间的右端点作为选择的第一个点
3.如果接下来的区间的左端点大于上一个点则需要重新选择点

注意:① 给出的K对Ai Bi没有并保证Ai一定比Bi小,所以在读取数据时要先判断大小并进行处理保证左端点小于右端点,即Ai小于等于Bi

注意: ② N头奶牛至少有一张照片,所以ans要初始化为1,每增加一个断点,照片的数量增加1

AC代码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值