hdu2037

链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037

这道题给我的启示是排序的问题,刚开始自己做的时候我对开始时间进行排序,造成了必须两重循环才能结束,采用如下排序,一重循环即可。

#include <iostream>
#include <algorithm>
using namespace std;
struct view
{
	int start;
	int end;
};
int cmp(view a,view b)
{
     if(a.end==b.end) return a.start<b.start;
	 else return a.end<b.end;
}
view a[105];
int main()
{
	int n,i;
	while(true)
	{
		cin>>n;
		if(n==0) break;
		for(i=0;i<n;i++)
			cin>>a[i].start>>a[i].end;
		sort(a,a+n,cmp);
		int count;
		int max=0;
        int old=0;
        count=1;
	    for(i=1;i<n;i++)
		{
			if(a[i].start>=a[old].end)
			{
				count++;
				old=i;
			}
		}
		cout<<count<<endl;
	}
	
	
	return 0;
}

  

posted on 2012-05-25 09:05  矮人狙击手!  阅读(228)  评论(0编辑  收藏  举报

导航