试题链接:http://codeup.cn/problem.php?cid=100000584&pid=0
关键词:区间贪心
ac代码如下所示:
(比较奇怪的是我在声明区间数组时,将itv声明为int itv[num]然后运行就会报错,但是声明int itv[100]就能ac,当时困扰了我很久,明明一点逻辑问题都没有了但是不停的“答案错误”…决定以后直接就像int itv[100]这样声明数组。)
#include<iostream>
#include<algorithm>
using namespace std;
struct interval{
int x,y;
};
bool cmp(interval a,interval b){
if(a.y!=b.y)return a.y<b.y; //右区间不相同,则按照右端点从小到大排序
else return a.x>b.x; //右区间相同,按照左端点从大到小排序
}
int main(){
int num;
int cnt;
interval itv[100];
while(cin>>num,num){
for(int i=0;i<num;i++){
cin>>itv[i].x>>itv[i].y;
}
sort(itv,itv+num,cmp); //给区间排序
int lastY=itv[0].y; //右区间最小的一个
cnt=1;
for(int i=1;i<num;i++){
if(itv[i].x>=lastY){
lastY=itv[i].y;
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}