[HAOI2007]覆盖问题

题目描述

某人在山上种了N棵小树苗。冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定 用3个L*L的正方形塑料薄膜将小树遮起来。我们不妨将山建立一个平面直角坐标系,设第i棵小树的坐标为(Xi,Yi),3个L*L的正方形的边要求平行 与坐标轴,一个点如果在正方形的边界上,也算作被覆盖。当然,我们希望塑料薄膜面积越小越好,即求L最小值。

输入格式

第一行有一个正整数N,表示有多少棵树。

接下来有N行,第i+1行有2个整数Xi,Yi,表示第i棵树的坐标,保证不会有2个树的坐标相同。

输出格式

一行,输出最小的L值。

样例 #1

样例输入 #1

4
0 1
0 -1
1 0
-1 0

样例输出 #1

1

提示

数据范围

100%的数据,-1,000,000,000<=Xi,Yi<=1,000,000,000

30%的数据,N<=100

50%的数据,N<=2000

100%的数据,N<=20000



我一直困扰自己的错误思路:



一定会有一个点在角上,另外两个点紧挨边

实际上的正确想法是,



在铺好一块塑料布之后,删去已经铺好的点,剩下的点仍然是无序的,也就是第二三块与第一块的情况是相同的。

判断的式子也是相同的,不存在紧挨着边之类的问题。

另外,范围只有$ 20000 $,可以尝试一些复杂度较高的暴力。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int x[20010],y[20010];
int n;
int v[20010];
bool check(int l,int c)
{
int xi=INT_MAX,xa=INT_MIN,yi=INT_MAX,ya=INT_MIN;
for(int i=1;i<=n;i++)
if(!v[i])
{
xi=min(xi,x[i]);
xa=max(xa,x[i]);
yi=min(yi,y[i]);
ya=max(ya,y[i]);
}
bool ll=1;
for(int i=1;i<=n;i++)
if(!v[i])
{
if(x[i]>=xi&&x[i]<=xi+l&&y[i]>=yi&&y[i]<=yi+l)
v[i]=c;
else
{
ll=0;
}
}
if(c!=3) ll=check(l,c+1);
for(int i=1;i<=n;i++)
if(v[i]==c)
v[i]=0;
if(ll) return 1;
ll=1;
for(int i=1;i<=n;i++)
if(!v[i])
if(x[i]>=xi&&x[i]<=xi+l&&y[i]>=ya-l&&y[i]<=ya)
v[i]=c;
else
ll=0;
if(c!=3) ll=check(l,c+1);
for(int i=1;i<=n;i++)
if(v[i]==c)
v[i]=0;
if(ll) return 1;
ll=1;
for(int i=1;i<=n;i++)
if(!v[i])
if(x[i]>=xa-l&&x[i]<=xa&&y[i]>=yi&&y[i]<=yi+l)
v[i]=c;
else
ll=0;
if(c!=3) ll=check(l,c+1);
for(int i=1;i<=n;i++)
if(v[i]==c)
v[i]=0;
if(ll) return 1;
ll=1;
for(int i=1;i<=n;i++)
if(!v[i])
{
if(x[i]>=xa-l&&x[i]<=xa&&y[i]>=ya-l&&y[i]<=ya)
v[i]=c;
else
{
ll=0;
}
}
if(c!=3) ll=check(l,c+1);
for(int i=1;i<=n;i++)
if(v[i]==c)
v[i]=0;
if(ll) return 1;
for(int i=1;i<=n;i++)
if(v[i]==c)
v[i]=0;
return 0;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
memset(v,0,sizeof(v));
int l=1,r=INT_MAX-3;
while(l<r)
{
memset(v,0,sizeof(v));
int mid=(l+r)/2;
if(check(mid,1)) r=mid;
else l=mid+1;
}
printf("%d",l);
return 0;
}
/*
5
2 2
3 5
6 -3
-2 -2
-3 6
*/

关于"覆盖问题”的反思的更多相关文章

  1. poj 3417 Network 题解

    题意: 先给出一棵树,然后再给出m条边,把这m条边连上,然后剪掉两条边,一条是原边,一条是新边,问有多少种方案能使图不连通. 思路: 从原边的角度看 1.树加边,一定成环,加一条(u,v)边就有u-& ...

  2. OO第一次博客作业总结反思

    使用了masteruml插件来生成类图和metrics插件分析代码 第一次作业 1.UML类图 >在第一次作业中,使用了两个类,代码中有没有使用的变量与函数,为平衡两个类的内容,我将输出函数放在 ...

  3. 关于git pull时出现的问题及解决反思

    前因 在前面由于已经git过一次,按照娄老师的要求,代码一个一个commit,所以删掉之前的git仓库(用la查看,使用rm -rf .git删除).但远程origin已经存在,所以执行git rem ...

  4. [考试反思]0801NOIP模拟测试11

    8月开门红. 放假回来果然像是神志不清一样. 但还是要接受这个事实. 嗯,说好听点,并列rank#7. 说难听点,垃圾rank#18. 都不用粘人名就知道我是哪一个吧... 因为图片不能太长,所以就不 ...

  5. 【NHOI2018】黑格覆盖

    [题目描述] 在一张由 M * N 个小正方形格子组成的矩形纸张上,有 k 个格子被涂成了黑色.给你一张由 m * n 个同样小正方形组成的矩形卡片,请问该卡片最多能一次性覆盖多少个黑格子? [输入数 ...

  6. 【集训Day3 离散化】矩形覆盖

    矩形覆盖(planting) [问题描述] 给定在一个平面坐标系上的N(1 <= N <= 100)个矩形区域,这N个矩形可能有相互覆盖的部分.求平面上被所有矩形覆盖的总面积,重复部分只算 ...

  7. 记一次构建SaaS平台项目失败后的反思(收集的客户需求太少,且没有区分重点,闭门造车。技术演变要渐进)

    记一次构建SaaS平台项目失败后的反思 前言: 笔者从2017年起开始着手将公司现有的软件系统改造成多租户模式,以降低整个系统的运营成本.但最后这个项目以失败告终.今天,我将对这个SaaS项目是如何走 ...

  8. 2019.8.1 NOIP模拟测试11 反思总结

    延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...

  9. 【2020.12.02提高组模拟】A组反思

    55,rk47 T1 赛时先想了\(trie\),想到不一定是前缀,然后就放弃转为打暴力 得分:\(RE22\) 正解是只用判断\(i\)与\(i+1\)的关系,那么只有两种情况,判断一下然后\(dp ...

  10. JZOJ 11.28 提高B组反思

    JZOJ 11.28 提高B组反思 被打崩了呀 下次打提高A去了(逃 T1 刚开始没有读懂题,后来读懂了以后没有思路.没有想到是一个构造题,对同构的性质没有了解清楚,题解也讲的不明不白,懵-- T2 ...

随机推荐

  1. NC17383 A Simple Problem with Integers

    题目链接 题目 题目描述 You have N integers A1, A2, ... , AN. You are asked to write a program to receive and e ...

  2. 【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题

    问题描述 在中国区Azure上,使用Media Service服务,想要使用.NET的代码来对上传视频创建缩略图(Thumbnail) . 通过官网文档(https://docs.azure.cn/z ...

  3. #Python 利用pivot_table,数据透视表进行数据分析

    前面我们分享了,利用python进行数据合并和连接,但是工作中,我们往往需要对数据进一步的聚合或者运算,以求最后的数据结果. 今天我们就来学习一下利用pandas模块,对数据集进行数据透视分析. pi ...

  4. pandas 常用操作记录

    apply函数 一个非常灵活的函数,能够对整个DataFrame或者Series执行给定函数的操作. 函数可以是自定义的,也可以是python或者pandas内置的函数,还可以是匿名函数. 作用: 用 ...

  5. npm init vite@latest; 项目名字是abcde,选了vue-ts; cd abcde; npm install; npm run dev;浏览器访问,结果是空白的,这是怎么回事?

    npm init vite@latest 项目名字是abcde,选了vue-ts cd abcde npm install npm run dev 浏览器访问,结果是空白的,这是怎么回事? 后来发现是 ...

  6. Python获取当前时间、获取当月第一天、最后一天日期等方法

    ```python先导入包: import calendarimport datetimefrom datetime import timedelta获取今天日期: #返回datetime格式:eg: ...

  7. 配置pip源

    1.使用配置文件配置文件[global]trusted-host=pypi.doubanio.comindex-url=https://pypi.doubanio.com/simple配置文件放置位置 ...

  8. 在Centos7上安装PXE装机环境来批量安装操作系统

    步骤 1:安装必要的软件包 首先,需要确保系统已安装 dhcp.tftp-server 和 httpd 等软件包.可以使用以下命令进行安装: yum install -y dhcp tftp-serv ...

  9. Cannot read property ‘type‘ of undefined Occurred while linting **\index.jsx:1

    今一个react 中使用mobx 老是提示Cannot read property 'type' of undefined Occurred while linting **\index.jsx:1 ...

  10. vue 一键导出数据为excel文件并附带样式 十分简单

    自入行以来我就一直疑惑一个问题,导出excel为什么总是搞的很复杂,包括网上的教程,屎里淘金,非常耗费精力.今天刚好业务需要,整理一个简单明了的由vue前端导出的版本出来. 开始: #1.添加xlsx ...