[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. create-react-app 构建的项目使用代理 proxy 解决跨域请求

    1. 正常运行 npm run eject 暴露项目的配置文件 (前三个步骤可省略,最好的是按照第四步操作) 在config/webpackDevServer.config文件下,大概在104行 1 ...

  2. Prism Sample 10 10-CustomRegistrations

    作用同上节,这里是用修改注册的方式自定义View和ViewModel的关联. protected override void ConfigureViewModelLocator() { base.Co ...

  3. Rsync文件同步及备份

    Rsync文件同步及备份 目录 Rsync文件同步及备份 Rsync基本概述 远程文件传输 服务端口 Rsync的三种传输模式 本地方式(类似cp) 远程方式(类似scp) 守护进程(C/S结构) R ...

  4. 一种KV存储的GC优化实践

    作者:vivo 互联网服务器团队- Yuan Jian Wei 从内部需求出发,我们基于TiKV设计了一款兼容Redis的KV存储.基于TiKV的数据存储机制,对于窗口数据的处理以及过期数据的GC问题 ...

  5. 2022-11-11:设计一个最大栈数据结构,既支持栈操作,又支持查找栈中最大元素。 实现 MaxStack 类: MaxStack() 初始化栈对象 void push(int x) 将元素 x 压

    2022-11-11:设计一个最大栈数据结构,既支持栈操作,又支持查找栈中最大元素. 实现 MaxStack 类: MaxStack() 初始化栈对象 void push(int x) 将元素 x 压 ...

  6. 2022-08-29:以下go语言代码输出什么?A:10 10;B:10 19;C:19 10;D:19 19。 package main import ( “fmt“ ) func he

    2022-08-29:以下go语言代码输出什么?A:10 10:B:10 19:C:19 10:D:19 19. package main import ( "fmt" ) fun ...

  7. Django4全栈进阶之路18 项目实战(用户管理):user_edit.html用户编辑画面设计

    1.模块 {% extends 'base.html' %} {% block content %} <!-- 编辑用户表单 --> <div class="card mt ...

  8. PostgreSQL一站式插件推荐 -- pg_enterprise_views

    近日发现PG官方插件列表中新收录了一款插件 pg_enterprise_views,因为官方已经数年未添新的插件了很是新奇,找了台设备测试过后果断上了生产,得空分享给大家. 该插件提供了数十张系统表及 ...

  9. Vuex modules 中active相互调用

    大中型项目中使用vuex进行状态管理时,经常会按模块分割到不同的module中去,而操作中难免有模块中的active相互调用的情况,然而有时也会出现一些问题,这里顺便记录下 store目录结构 在us ...

  10. Spectre.Console-处理依赖注入

    引言 之前说的做自动记录 Todo 执行过程中消耗的时间的Todo 项目,由于想持续保持程序执行,就放弃了 Spectre.Console.Cli,后来随着命令越来越多,自己处理觉得很是麻烦,想了想要 ...