今天学到了代码以外的东西,就是你在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. NOIP 2017 小凯的疑惑(同余类)

    题意 给出两个互质的数a,b问最大的不能被xa+yb(x,y>=0)表示的数.(a,b<=109) 题解 NOIPday1T1一道数论题,不知埋葬了多少人的梦想. 用同余类去解释. 我们依 ...

  2. CF245H Queries for Number of Palindromes(回文树)

    题意翻译 题目描述 给你一个字符串s由小写字母组成,有q组询问,每组询问给你两个数,l和r,问在字符串区间l到r的字串中,包含多少回文串. 输入格式 第1行,给出s,s的长度小于5000 第2行给出q ...

  3. 题解 CF915D 【Almost Acyclic Graph】

    这道题我第一次的想法是直接判环的数量,然而事实证明实在是太naive了. 随便画个图都可以卡掉我的解法.(不知道在想什么) 这道题的正解是拓扑排序. 朴素的想法是对所有边都跑一次拓扑,但这样$O(m( ...

  4. Java基础学习总结(21)——数组

    一.数组的基本概念 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量. 数组的元素可以是任何数据类型,包括基 ...

  5. glEnable(GL_DEPTH_TEST)作用

    glEnable(GL_DEPTH_TEST): 用来开启更新深度缓冲区的功能,也就是,如果通过比较后深度值发生变化了,会进行更新深度缓冲区的操作.启动它,OpenGL就可以跟踪再Z轴上的像素,这样, ...

  6. hdu 5380 Travel with candy(双端队列)

    pid=5380">题目链接:hdu 5380 Travel with candy 保持油箱一直处于满的状态,维护一个队列,记录当前C的油量中分别能够以多少价格退货,以及能够推货的量. ...

  7. POJ 3150 Cellular Automaton(矩阵高速幂)

    题目大意:给定n(1<=n<=500)个数字和一个数字m,这n个数字组成一个环(a0,a1.....an-1).假设对ai进行一次d-step操作,那么ai的值变为与ai的距离小于d的全部 ...

  8. Android程序猿自己动手制作.9.png图片

    1:怎样制作9.png图片素材: 打开SDK工具文件夹下: draw9patch.zip  解压执行draw9patch.bat.有的直接搜索会有:draw9patch.bat. 双击执行后,例如以下 ...

  9. BZOJ3511: 土地划分

    [传送门:BZOJ3511] 简要题意: 给出n个点,m条边,每个点有A和B两种形态,一开始1为A,n为B 给出VA[i]和VB[i],表示第i个点选择A和B形态的价值 每条边给出x,y,EA,EB, ...

  10. Git的日常处理流程

    前提 本地有2个分支,一个是master,还有一个是local master 默认追踪origin/master local 通过git branch -u origin/master来映射 开发的时 ...