按c排序,c相同则按d排序(均从小到大),从左至右遍历,当发现一个的d比前面出现过的最小的d还小那么它一定是解。
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include
<
iostream
>
#include < cstdio >
#include < cstdlib >
#include < cstring >
#include < algorithm >
using namespace std;
#define maxn 10005
struct Hotel
{
int c, d;
} f[maxn];
int n, ans;
bool operator < ( const Hotel & a, const Hotel & b)
{
if (a.c == b.c)
return a.d < b.d;
return a.c < b.c;
}
void input()
{
for ( int i = 0 ; i < n; i ++ )
scanf( " %d%d " , & f[i].c, & f[i].d);
}
void work()
{
ans = 0 ;
int maxd = 100000000 ;
for ( int i = 0 ; i < n; i ++ )
if (f[i].d < maxd)
{
ans ++ ;
maxd = f[i].d;
}
}
int main()
{
// freopen("D:\\t.txt", "r", stdin);
while (scanf( " %d " , & n) != EOF && n != 0 )
{
input();
sort(f, f + n);
work();
printf( " %d\n " , ans);
}
return 0 ;
}
#include < cstdio >
#include < cstdlib >
#include < cstring >
#include < algorithm >
using namespace std;
#define maxn 10005
struct Hotel
{
int c, d;
} f[maxn];
int n, ans;
bool operator < ( const Hotel & a, const Hotel & b)
{
if (a.c == b.c)
return a.d < b.d;
return a.c < b.c;
}
void input()
{
for ( int i = 0 ; i < n; i ++ )
scanf( " %d%d " , & f[i].c, & f[i].d);
}
void work()
{
ans = 0 ;
int maxd = 100000000 ;
for ( int i = 0 ; i < n; i ++ )
if (f[i].d < maxd)
{
ans ++ ;
maxd = f[i].d;
}
}
int main()
{
// freopen("D:\\t.txt", "r", stdin);
while (scanf( " %d " , & n) != EOF && n != 0 )
{
input();
sort(f, f + n);
work();
printf( " %d\n " , ans);
}
return 0 ;
}