2017.10.4 国庆清北 D4T2 正方形
题目描述
在一个10000*10000的二维平面上,有n颗糖果。
LYK喜欢吃糖果!并且它给自己立了规定,一定要吃其中的至少C颗糖果!
事与愿违,LYK只被允许圈出一个正方形,它只能吃在正方形里面的糖果。并且它需要支付正方形边长的价钱。
LYK为了满足自己的求食欲,它不得不花钱来圈一个正方形,但它想花的钱尽可能少,你能帮帮它吗?
输入输出格式
输入格式:
第一行两个数C和n。
接下来n行,每行两个数xi,yi表示糖果的坐标。
输出格式:
一个数表示答案。
输入输出样例
3 4
1 2
2 1
4 1
5 2
4 样例解释
选择左上角在(1,1),右下角在(4,4)的正方形,边长为4。
说明
对于30%的数据n<=10。
对于50%的数据n<=50。
对于80%的数据n<=300。
对于100%的数据n<=1000。1<=xi,yi<=10000。
/*
如果边长为x可行,边长x+1也一定能覆盖至少C个糖果
假如x不可行,边长为x-1是不可能覆盖C个糖果的。 ——> 二分答案。
l=1,r=10000, 判断mid是否可行, 可行-> 答案在[l,mid] ,不可行 -> (mid,r]
while (l<=r) {if (!check((l+r)/2)) l=(l+r)/2+1; else r=(l+r)/2-1;}
二分完答案后,怎么判定。
↓↓↓↓↓↓↓↓↓↓↓
枚举上边在哪里。
下边的位置是固定的。
哪些糖果被夹在这段区间中。 O(n) 左边为1的情况下,右边是什么
随着左边向右移动,右边也一定向右移动。
左边至多移动n次,右边也至多移动n次,总共2n次。 O(n)
*/ #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; int C,n,L,R,mid,temp[];
struct Candy
{
int x,y;
bool operator < (Candy a) const //在结构体里一定要写const
{
return x<a.x;
}
}candy[]; bool judge(int l,int r) //上下长
{
if(r-l+<C) return false; //糖果数不够C个
int j=;
for(int i=l;i<=r;i++) temp[++j]=candy[i].y; //纵坐标
sort(temp+,temp+j+);
for(int i=C;i<=j;i++) //枚举将C个糖果框起来边长能不能小于等于二分的边长mid
{
if(temp[i]-temp[i-C+]<=mid) return true; //将i之前的C个糖果框起来边长小于等于二分的边长,可行
}
return false;
} bool check(int x) //左右长
{
int l=;
for(int i=;i<=n;i++)
{
if(candy[i].x-candy[l].x>x) //边长比二分的边长大了
{
if(judge(l,i-)) return true; //判断是否可行,i-1是因为要找的边长<=mid
while(candy[i].x-candy[l].x>x) l++; //不行的话,左边界向右移动
}
}
if(judge(l,n)) return true; //单独判断n为右边界的时候是否可行,因为r==n时没法在上面的for循环中写
return false;
} int main()
{
scanf("%d%d",&C,&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&candy[i].x,&candy[i].y);
}
sort(candy+,candy+n+);
L=,R=;
while(L<=R) //二分一个边长
{
mid=(L+R)>>;
if(check(mid)) R=mid-;
else L=mid+;
}
printf("%d",L+);
return ;
}
2017.10.4 国庆清北 D4T2 正方形的更多相关文章
- 2017.10.1 国庆清北 D1T1 zhx的字符串题
题目背景 2017国庆清北D1T1 题目描述 你是能看到第一题的 friends 呢. ——hja 何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为 字符串定义了新的权值计算方法 ...
- 2017.10.6 国庆清北 D6T2 同余方程组
题目描述 求关于x 的同余方程组 x%a1 = b1 x%a2 = b2 x%a3 = b3 x%a4 = b4 的大于等于0 的最小整数解. 输入输出格式 输入格式: 一行8 个整数,表示a1; b ...
- 2017.10.6 国庆清北 D6T1 排序
题目描述 小Z 有一个数字序列a1; a2; .... ; an,长度为n,小Z 只有一个操作:选 定p(1<p<n),然后把ap 从序列中拿出,然后再插⼊到序列中任意位置. 比如a 序列 ...
- 2017.10.3 国庆清北 D3T3 解迷游戏
题目描述 LYK进了一家古董店,它很想买其中的一幅画.但它带的钱不够买这幅画. 幸运的是,老板正在研究一个问题,他表示如果LYK能帮他解出这个问题的话,就把这幅画送给它. 老板有一个n*m的矩阵,他想 ...
- 2017.10.3 国庆清北 D3T2 公交车
题目描述 LYK在玩一个游戏. 有k群小怪兽想乘坐公交车.第i群小怪兽想从xi出发乘坐公交车到yi.但公交车的容量只有M,而且这辆公交车只会从1号点行驶到n号点. LYK想让小怪兽们尽可能的到达自己想 ...
- 2017.10.3 国庆清北 D3T1 括号序列
题目描述 LYK有一个括号序列,但这个序列不一定合法. 一个合法的括号序列如下: ()是合法的括号序列. 若A是合法的括号序列,则(A)是合法的括号序列. 若A和B分别是合法的括号序列,则AB是合法的 ...
- 2017.10.4 国庆清北 D4T1 财富
(其实这题是luogu P1901 发射站 原题,而且数据范围还比luogu小) 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以身高为美的环境,因此在 ...
- 2017.10.7 国庆清北 D7T1 计数
题目描述 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍数. 输入输出格式 输入格式: 输入文件名为count.in. 第一行,包含两个整数:n ...
- 2017.10.5 国庆清北 D5T1 拼不出的数
题目描述 3 个元素的集合{5,1,2}的所有子集的和分别是0,1,2,3,5,6,7,8.发现最小的不能由该集合子集拼出的数字是4. 现在给你一个n个元素的集合,问你最小的不能由该集合子集拼出的数字 ...
随机推荐
- ECharts折线图堆叠设置为不堆叠的方法
下图是ECharts折线图堆叠的官方源码,设置折线图不堆叠只需要将每一个stack的值设置为不一样的名称或者将stack属性删除即可. option = { title: { text: '折线图堆叠 ...
- 洛谷【P1048 采药】题解
题目链接 分析:典型的01背包问题,设dp[i][j]为空间(也就是题面中的时间)是j的背包在装前i个物品(草药)所得的最大价值,v[i]为第i个物品的重量(采药的时间),w[i]为第i个物品(草药) ...
- 4_PHP流程控制语句_1_条件控制语句
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP流程控制共有3种类型:条件控制结构.循环结构以及程序跳转和终止语句. 4.1 条件控制语句 4.1.1 if ...
- 【转载】C#中Convert.ToInt32方法将字符串转换为Int32类型
在C#编程过程中,可以使用Convert.ToInt32方法将字符串或者其他可转换为数字的对象变量转换为ToInt32类型,Convert.ToInt32方法有多个重载方法,最常使用的一个方法将字符串 ...
- vue-cli + webpack 环境搭建
1.下载nodeJS,官网 https://nodejs.org/en/ . 2.安装nodeJS.安装完成后可以检测node -v 如果版本号的话则正常. 3.安装淘宝镜像.npm install ...
- 83.基于Vue SEO的四种方案(小结)
前言:众所周知,Vue SPA单页面应用对SEO不友好,当然也有相应的解决方案,下面列出几种最近研究和使用过的SEO方案,SRR和静态化基于Nuxt来说. 1.SSR服务器渲染:2.静态化:3.预渲染 ...
- CspParameters 对象已存在异常 解决多应用对同一容器的访问问题
CspParameters cspParams; cspParams = new CspParameters(PROVIDER_RSA_FULL); cspParams.KeyContainerNam ...
- Tomcat启动堆栈异常
近日部署项目到Tomcat,访问一直404. 于是查看 catalina.out 日志信息,发现如下信息 30-Jun-2019 16:38:03.642 SEVERE [main] org.apac ...
- Linux添加硬盘创建新的逻辑卷方式
有同仁看了上文<Linux添加硬盘扩充已有分区存储空间方式>一文后,提出疑问,现在很多云服务器本来没有逻辑卷,添加数据盘后需要自行添加,如何处理? 此文将以某云服务器为例,详细进行解说. ...
- c# 将两个表的有效数据合到一个表中
<asp:DropDownList ID="ddlSpecialty" runat="server" > </asp:DropDownList ...