uva1312

题意:给定一个n*m的网格,给出网格上的k个点,找出不包含点在内的最大正方形(边界不算)。

分析:枚举y和y的间距,搜索在间距内的点的x的间距。

#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[100+10];
int maxy, maxx;
int yt[100 + 10];
int pnum;
int main() {int kase;cin >> kase;while (kase--) {cin  >> pnum>> maxx >> maxy;for (int i = 0; i < pnum; i++) {cin >> p[i].x>>p[i].y;yt[i] = p[i].y;}yt[pnum] = 0, yt[pnum + 1] = maxy;sort(yt, yt + pnum+2);sort(p, p + pnum);int ynum = unique(yt, yt + pnum + 2) - yt;int ans = 0,cx,cy;for (int i = 0; i < ynum; i++) {for (int j = i + 1; j < ynum; j++) {//枚举y的位置和间距int minyt = yt[i], maxyt = yt[j];int ylen = yt[j] - yt[i];int ux = 0;for (int k = 0; k < pnum; k++) {if (p[k].y<=minyt || p[k].y>=maxyt)continue;int xlen = p[k].x - ux;if (ans < min(xlen, ylen)) {ans = min(xlen, ylen);cx = ux, cy = minyt;}ux = p[k].x;}if (ans < min((maxx - ux), ylen)) {ans = min((maxx - ux), ylen);cx = ux, cy = minyt;}}}cout << cx << " " << cy << " " << ans << endl;if (kase)cout << endl;}return 0;
}

 


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部