uva1615

题意:给定平面上n个点,和一个值,要求在x轴上找到最少的点,使得对于给定的每个点,都能选出和它欧几里得距离不超过d的点

分析:贪心,从左向右,每次都找欧几里得最大的。

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct node {int x, y;bool operator<(const node &u) {if (x == u.x)return y > u.y;return x < u.x;}
}p[100000+10];
int xmax,D,n;
int mindis(int x, int y) {return x-sqrt(D*D - y * y);
}
int maxdis(int x, int y) {return sqrt(D*D - y * y)+x;
}
int main() {while (cin >> xmax >> D >> n) {for (int i = 0; i < n; i++)cin >> p[i].x >> p[i].y;sort(p, p + n);int xnow = 0;int xmin = 0;int ans = 0;for (int i = 0; i < n; i++) {if (i == 0) {xnow = maxdis(p[i].x, p[i].y);xmin = xnow;xmax += xmin;ans++;continue;}int minxz = mindis(p[i].x, p[i].y);int maxxz = maxdis(p[i].x, p[i].y);maxxz = min(maxxz, xmax);minxz = max(minxz, xmin);if (xnow < minxz) {ans++;xnow = maxxz;}else if (xnow > maxxz) {xnow = maxxz;}}cout << ans << endl;}return 0;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部