1.先对所有点集按y的降序排列,存放到vector变量中 x1, x2, ... , xn y1>y2>...>yn 2.判断(xi,yi)(其中i=1,...,n)是否满足题目要求的“最大的”点 满足要求为:xi>xj,j=1,...,i-1; 因为点集已经按照y的降序进行排列,判断(xi,yi)时,只有y值比yi大的点(即该点在(xi,yi)的左上方或右上方)可能导致(xi,yi)不是“最大的点”,接着排除右上方的可能性,即满足上述要求 #include <iostream> #include <vector> #include <algorithm> using namespace std; bool cmp(pair<int,int> point1, pair<int, int> point2) { if(point1.second > point2.second) return true; else return false; } int main(int argc, char** argv) { int n; cin>>n; vector<pair<int,int> > points; for(int i=0; i<n; i++) { int x,y; cin>>x>>y; points.push_back(make_pair(x,y)); } sort(points.begin(), points.end(), cmp); int max_x = 0; vector<pair<int, int> >::iterator it; for(it=points.begin(); it!=points.end(); it++) { if(it->first > max_x) { cout<<it->first<<" "<<it->second<<endl; max_x = it->first; } } return 0; }
点赞 评论

相关推荐

点赞 评论 收藏
分享

牛客热帖

牛客网
牛客企业服务