题目:
One day Dima and Alex had an argument about the price and quality of laptops. Dima thinks that the more expensive a laptop is, the better it is. Alex disagrees. Alex thinks that there are two laptops, such that the price of the first laptop is less (strictly smaller) than the price of the second laptop but the quality of the first laptop is higher (strictly greater) than the quality of the second laptop.
Please, check the guess of Alex. You are given descriptions of n laptops. Determine whether two described above laptops exist.
The first line contains an integer n (1 ≤ n ≤ 105) — the number of laptops.
Next n lines contain two integers each, ai and bi (1 ≤ ai, bi ≤ n), where ai is the price of the i-th laptop, and bi is the number that represents the quality of the i-th laptop (the larger the number is, the higher is the quality).
All ai are distinct. All bi are distinct.
If Alex is correct, print "Happy Alex", otherwise print "Poor Alex" (without the quotes).
2 1 2 2 1
Happy Alex
题意分析:
题目的意思大概就是有很多笔记本电脑,电脑有两种属性,一个price,一个quality。看是否存在两台电脑中,有一个台的价格更低而且质量更好。直接对price升序排列,然后循环维护一个最大质量ma,如果ma大于后面电脑的quality就break,对应输出就KO了。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int MAXN = 100000+5;
struct node
{
int a, b;
}di[MAXN];
int cmp(node x, node y)
{
return x.a < y.a;
}
int main()
{
int n, m;
while(~scanf("%d", &n))
{
int i;
for(i = 0;i < n;i++)
{
scanf("%d %d", &di[i].a, &di[i].b);
}
sort(di, di+n, cmp);
int ma = 0;
int ok = 0;
for(i = 0;i < n;i++)
{
if(ma > di[i].b)
{
ok = 1;
break;
}
ma = max(di[i].b, ma);
}
if(ok == 1)
{
printf("Happy Alex\n");
}
else
{
printf("Poor Alex\n");
}
}
return 0;
}