今天学到了代码以外的东西,就是你在vj上挂了content ,然后你想更新它,你就要刷新一下,不然你提交的那题可能提交到别的地方。

好了回到重点,本题的题意是:

#include<bits/stdc++.h>
#define de(x) cout<<#x<<"="<<x<<endl;
#define dd(x) cout<<#x<<"="<<x<<" ";
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define repd(i,a,b) for(int i=a;i>=(b);--i)
#define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
#define ll long long
#define mt(a,b) memset(a,b,sizeof(a))
#define fi first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define pdd pair<double,double>
#define pdi pair<double,int>
#define mp(u,v) make_pair(u,v)
#define sz(a) a.size()
#define ull unsigned long long
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define qc std::ios::sync_with_stdio(false)
const int mod = 1e9+;
const int maxn = 1e6+;
const double EPS = 1e-;
using namespace std;
struct Point{
int x,y;
}p[maxn];
bool cmp1(Point a,Point b){
return a.x<b.x;
}
bool cmp2(Point a,Point b){
return a.y<b.y;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
int ansl=,ansr=,ans = ;
int n;
int w,h;
scanf("%d%d%d",&n,&w,&h);
bool fi = true,fj = true;
rep(i,,n){
scanf("%d%d",&p[i].x,&p[i].y);
if(p[i].x==&&p[i].y==) fi = false;
if(p[i].x==w&&p[i].y==h) fj = false;
}
if(fi) p[n++] = (Point){,};
if(fj) p[n++] = (Point){w,h};
sort(p,p+n,cmp1);
rep(i,,n){
int lx=p[i].x;
int l = ,r = h;
rep(j,i+,n){
if(p[i].x==p[j].x) continue;
if(min(p[j].x-lx,r-l)>ans){
ans = min(p[j].x-lx,r-l);
ansl = lx;
ansr = l;
}
if(p[i].y==p[j].y) break;
if(p[i].y<p[j].y) r = min(r,p[j].y);
else l = max(l,p[j].y);
}
}
repd(i,n-,){
int lx=p[i].x;
int l = ,r = h;
repd(j,i-,){
if(p[i].x==p[j].x) continue;
if(min(lx-p[j].x,r-l)>ans){
ans = min(lx-p[j].x,r-l);
ansl = p[j].x;
ansr = l;
}
if(p[i].y==p[j].y) break;
if(p[i].y<p[j].y) r = min(r,p[j].y);
else l = max(l,p[j].y);
}
}
sort(p,p+n,cmp2);
rep(i,,n){
if(p[i].y!=p[i-].y){
if(min(w,p[i].y-p[i-].y)>ans){
ans = min(w,p[i].y-p[i-].y);
ansl = ;
ansr = p[i-].y;
}
}
}
printf("%d %d %d\n",ansl,ansr,ans);
if(T) cout<<endl;
}
return ;
}

求一个最大正方形,边界可以包含障碍点,内部不能。

解法:

可以看看这个论文:http://www.doc88.com/p-9042008501060.html

我们可以用单调栈来做,但是复杂度是O(nm),不能,但是我们可以用另一个方法,就是那个网站里的算法一,复杂度为O(s*s),s为障点数;

做法就是先加入0,0和w,h这两个点(可以阻止第一类遗漏),先按x坐标排序,枚举每一个左边界,然后在反过来,枚举每一个右边界

然后接着就是矩形左边界和最左重合,右边界和最右重合的情况我门还是遗漏了,所以我们可以按y拍个序,枚举每两个y之间的矩形

代码:

今日题解------uvalive 2689的更多相关文章

  1. 今日题解------codeforce 893d

    题意:给你一个数列,小于零表示表示信用卡里取出钱,大于零表示信用卡里存钱,等于零表示要查询信用卡, 如果被查到信用卡里的钱小于零,那你就GG,或者在任何时候你的信用卡里的钱大于d的话(不需要找ai等于 ...

  2. 今日题解------codeforces 895C

    题意:给你一个数列,然后找任意数量的数字(除了空集),使得他们的乘机为一个数的平方 我们发现元素最大70,所以我们可以从这里入手,平方数有个性质就是它的所有质因子的指数为偶数 比如:36 = 2*2* ...

  3. UVALive 6124 Hexagon Perplexagon 题解

    http://vjudge.net/problem/viewProblem.action?id=37480 East Central Regional Contest Problem C: Hexag ...

  4. UVALive 6125 I’ve Got Your Back(gammon) 题解

    http://vjudge.net/problem/viewProblem.action?id=37481 East Central Regional Contest Problem D: I’ve ...

  5. UVALive 2521 Game Prediction 题解

    这个我上来把题目理解错了,我以为所有人的牌都是一样的,感觉这个题太麻烦了吧,而且题目样例过不去啊……后来发现理解错了,给出的数据是他一个人的数据,就是让我们求他一定能赢的轮数,所有的牌是固定的(1 - ...

  6. UVALive 7501 Business Cycle(二分)题解

    题意:n个数,有一个起始值,按顺序从第一个开始不断循环取数,如果取完后相加小于0就变为0,最多取p个数,问你得到大于等于值g所需要的最小起始值为多少 思路:这题目爆long long爆的毫无准备,到处 ...

  7. UVALive 7503 Change(乱搞)题解

    题意:你现在有面额为A的纸币,现在需要面额为B的钱(可以是一张也可以是好多张拼成一张),有一台自动售货机,里面有任意价格的商品,售货机兑换出的零钱是随机的(比如找你0.03可能给你0.01+0.01+ ...

  8. UVALive 7512 November 11th 题解

    思路:心态大崩,最多不讲了,最少应该是三个一组,比如......应该是.S..S.,这样占的最多 代码: #include<set> #include<map> #includ ...

  9. UVALive 6955 Finding Lines(随机化优化)题解

    题意:问你是否有一条直线满足这条直线上的点个数与总个数之比不小于p 思路:解法太暴力了,直接随机取两个数,如果能满足条件就输出可以,否则不行.证明一下为什么可以随机化,题目给出可能有P >=20 ...

随机推荐

  1. Tomcat IO阻塞异常

    tomcat的maxThreads.acceptCount(最大线程数.最大排队数) tomcat 的Connector配置如下 <Connector port="8080" ...

  2. Percona Monitoring and Management (PMM)安装使用

    一.docker安装 参考:http://www.cnblogs.com/liuyongsheng/articles/6595353.html 二.Percona Monitoring and Man ...

  3. ES6学习笔记(十八)Class 的继承

    1.简介 Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链prototype实现继承,要清晰和方便很多. class Point { } class ColorPoin ...

  4. 求第区间第k大数 TLE归并树

    题 给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入: 第一行包含两个正整数N.M,分别表示序列的长度和查询的个数. 第二行包含N个正整数,表示这个序列各项的数字. 接下来M ...

  5. POJ 3567 Cactus Reloaded(仙人掌直径)

    题意 裸的仙人掌直径. 题解 先考虑基环树的直径:先算出每颗“树”的直径,再在环上跑DP 再考虑仙人掌的直径:把每个基环树缩成一条边,边长为基环树深度. #include<iostream> ...

  6. 关于git及其github的使用

    一:序言(就是瞎扯) 人们都说不会使用git和github的程序员都不是好程序员,是的,当我第一次听到的时候有点失望.因为我也不会...但是这句话激起了我学习使用git的动力(其实也没怎么深入的学习) ...

  7. Zookeeper入门:基本概念、5项配置、启动

    起源 最早接触Zookeeper,是在学习Hadoop权威指南这本书的时候,印象中是Hadoop项目的一个子工程.      最近,项目中需要用到"分布式锁".      之前,在 ...

  8. 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

  9. 题解 P3521 【[POI2011]ROT-Tree Rotations】

    这道题采用权值线段树合并的解法. 首先讲一下解法中出现的两个概念:权值线段树与线段树合并. 所谓权值线段树,可以理解为维护的信息反过来的普通线段树,我个人认为值域线段树这个名字其实要准确一些. 举个例 ...

  10. FZOJ 2176 easy problem ( 树链剖分 )

    pid=2176" target="_blank">题目链接~~> 做题感悟:感觉做多了树链剖分的题目,有很多是树链剖分 + 想法.. 解题思路: 这题非常明 ...