题意:给出一堆点。一类点,当以分别以他们中的一个作为原点时,第一象限没有点,不包括坐标轴上的点。求这类点的总数。
思路:
将点按横坐标降序排序,横坐标相等时取最上面的那个,然后从图的右边向左边查找,如果一个点的y值大于右面一个点的y值,则总数加一。想想为什么
错因:一开始做复杂了,所以排序除了问题,错了很多次
统计:756k, 188ms
#include <iostream> #include <algorithm> #define F(i,a,b) for (int i=a;i<=b;i++) #define FD(i,a,b) for (int i=a;i>=b;i--) using namespace std; struct P { int x, y, id; P() { } P(int a, int b, int c) { x = a, y = b, id = c; } bool operator < (const P& b) const { if (x==b.x) return y < b.y; return x < b.x; } }; P p[ 50001 ]; int ax[ 50001 ], ay[ 50001 ]; int n; int main() { int total, x, y; while (scanf("%d",&n) && n != 0) { total = 0; F ( i, 1, n ) { scanf("%d%d",&x,&y); p[ i ].x = x, p[ i ].y = y; } sort( & p[ 1 ], & p[ n + 1 ]); total = 1; int maxy = p[ n ].y; FD ( i, n-1 , 1 ) { if ( p[ i ].y > maxy ) { maxy = p[ i ].y; total++; } } printf("%d/n", total) ; } return 0; }