博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1052 dfs
阅读量:6036 次
发布时间:2019-06-20

本文共 1750 字,大约阅读时间需要 5 分钟。

  首先可以二分答案,将最优性问题转化为判定性问题。

  对于二分到的边长,我们可以把所有的点看成一个大的矩形,这个矩形为包括所有点的最小矩形,那么贪心的想,3个正方形,第一个肯定放在这个矩形其中的一角,然后去掉覆盖的点,然后再求出一个矩形,然后再枚举放在哪一角,去掉之后判断剩下的是否可以由一个正方形覆盖就行了。

  反思:没画图,边界算的不对,而且枚举完两个正方形之后要判下是否没有没覆盖的点了。另外提供神样例 4 1 1 -1 -1 1 -1 -1 1答案是2。

/**************************************************************    Problem: 1052    User: BLADEVIL    Language: C++    Result: Accepted    Time:1484 ms    Memory:1280 kb****************************************************************/ //By BLADEVIL#include 
#include
#include
#define maxn 20010#define inf (~0U>>1) using namespace std; struct rec {    int x,y,flag;    rec(){        x=y=flag=0;    }}a[maxn],b[maxn]; int n; bool cmp(rec x,rec y) {    return (x.flag
=left)&&(b[i].y<=up)&&(b[i].y>=down)) b[i].flag=1;} bool work(int i,int j,int x) {    memcpy(b,a,sizeof a);    make(i,x);    sort(b+1,b+1+n,cmp);    make(j,x);    sort(b+1,b+1+n,cmp);    rec MAX,MIN;    update(MAX,MIN);    int left=MIN.x,right=MAX.x,up=MAX.y,down=MIN.y;    //printf("%d %d %d %d %d\n",x,left,right,up,down);    if ((left==inf)&&(right==-inf)&&(up==-inf)&&(down==inf)) return 1;    if ((MAX.x-MIN.x<=x)&&(MAX.y-MIN.y<=x)) return 1; else return 0;} bool judge(int x) {    for (int i=1;i<=4;i++)         for (int j=1;j<=4;j++) if (i!=j) if (work(i,j,x)) return 1;    return 0;} int main() {    scanf("%d",&n);    for (int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);    //printf("%d\n",work(1,2,1)); return 0;    int l=1,r=1e9,ans=0;    while (l<=r) {        //printf("%d %d\n",l,r);        int mid=l+r>>1;        if (judge(mid)) ans=mid,r=mid-1; else l=mid+1;    }    printf("%d\n",ans);    return 0;}

 

转载于:https://www.cnblogs.com/BLADEVIL/p/3590408.html

你可能感兴趣的文章
代理模式
查看>>
具体问题具体分析
查看>>
【SqlServer系列】表达式(expression)
查看>>
maven与gradle的对比
查看>>
异常备忘:java.lang.UnsupportedClassVersionError: Bad version number in .class file
查看>>
uasy-datetimebox的使用
查看>>
Android Home键监听
查看>>
Java JVM虚拟机选项Xms/Xmx/PermSize/MaxPermSize(转)
查看>>
linux convert命令安装及使用
查看>>
JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
查看>>
laravel5.5 Syntax error or access violation: 1071 Specified key was too long
查看>>
分布式锁与实现(一)——基于Redis实现
查看>>
RDLC报表显示图片
查看>>
用查表查找汉字笔画
查看>>
top高级技能
查看>>
两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)...
查看>>
sso单点登录,单点登录原理图,单点登录图解,单点登录
查看>>
原码、反码、补码的正(nao)确(can)打开方式
查看>>
《算法导论》
查看>>
ResourceBundle.getBundle方法demo
查看>>