这题就是个很简单的贪心,可惜我理解能力不好,把这题理解错了,于是跪了一个多小时。
那两句要求的意思是一个候选旅馆M,在他比他近的都比他贵,比他便宜的都比他远,这么看就很显然写个结构体,成员是距离和价钱,都升序排序,按照距离遍历,碰到一个价钱比前面旅馆全都便宜的就ans++,他后面的不管比他便宜还是贵,都无所谓,就是这么简单。可悲的我的理解能力
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct hotel
{
int d;
int c;
}p[50005];
bool cmp(struct hotel a,struct hotel b)
{
if(a.d==b.d) return a.c<b.c;
return a.d<b.d;
}
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
for(int i=0;i<n;i++)
{
scanf("%d %d",&p[i].d,&p[i].c);
}
sort(p,p+n,cmp);
int ans=1;
int flag=p[0].c;
for(int i=1;i<n;i++)
{
if(p[i].c<flag)
{
ans++;
flag=p[i].c;
}
}
printf("%d\n",ans);
}
return 0;
}