AIM Tech Round (Div. 1) C. Electric Charges 二分
C. Electric Charges
题目连接:
http://www.codeforces.com/contest/623/problem/C
Description
Programmer Sasha is a student at MIPT (Moscow Institute of Physics and Technology) and he needs to make a laboratory work to pass his finals.
A laboratory unit is a plane with standard coordinate axes marked on it. Physicists from Moscow Institute of Physics and Technology charged the axes by large electric charges: axis X is positive and axis Y is negative.
Experienced laboratory worker marked n points with integer coordinates (xi, yi) on the plane and stopped the time. Sasha should use "atomic tweezers" to place elementary particles in these points. He has an unlimited number of electrons (negatively charged elementary particles) and protons (positively charged elementary particles). He can put either an electron or a proton at each marked point. As soon as all marked points are filled with particles, laboratory worker will turn on the time again and the particles will come in motion and after some time they will stabilize in equilibrium. The objective of the laboratory work is to arrange the particles in such a way, that the diameter of the resulting state (the maximum distance between the pairs of points of the set) is as small as possible.
Since Sasha is a programmer, he naively thinks that all the particles will simply "fall" into their projections on the corresponding axes: electrons will fall on axis X, while protons will fall on axis Y. As we are programmers too, we will consider the same model as Sasha. That is, a particle gets from point (x, y) to point (x, 0) if it is an electron and to point (0, y) if it is a proton.
As the laboratory has high background radiation and Sasha takes care of his laptop, he did not take it with him, and now he can't write a program that computes the minimum possible diameter of the resulting set. Therefore, you will have to do it for him.
Print a square of the minimum possible diameter of the set.
Input
The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — the number of points marked on the plane.
Each of the next n lines contains two integers xi and yi ( - 108 ≤ xi, yi ≤ 108) — the coordinates of the i-th point. It is guaranteed that no two points coincide.
Output
Print a single integer — the square of the minimum possible diameter of the set.
Sample Input
3
1 10
1 20
1 30
Sample Output
0
Hint
题意
平面上有n个点,坐标为(xi,yi)
然后每个点可以变成(xi,0)或者(0,yi)
都这样变换之后,问你最小的两点最大距离的平方是多少呢?
题解:
首先考虑全部扔到一维的情况,答案为min(sq(xmax-xmin),sq(ymax-ymin))sq为平方的意思。
然后我们再考虑x轴和y轴都有电子的情况
这种情况的距离最大值,显然是sq(max(abs(x)))+sq(max(abs(y)))
我们首先二分答案,然后暴力枚举放在x轴的区间的左端点,右端点显然是x轴哪些不影响答案的点
然后剩下的点都在y轴上,然后看看是否够
然后再暴力枚举右端点
然后这样就完了,这道题……
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
long long lmin[maxn],rmin[maxn];
long long lmax[maxn],rmax[maxn];
pair<long long,long long>a[maxn];
int n;
long long sq(long long x)
{
return x*x;
}
bool check(long long mid)
{
int r = 1;
for(int l=1;l<=n;l++)
{
if(a[l].first>0) break;
while(r<n && sq(a[r+1].first-a[l].first)<=mid && abs(a[r+1].first)<=abs(a[l].first)) r++;
while(abs(a[r].first)>abs(a[l].first)) r--;
long long low = min(lmin[l-1],rmin[r+1]);
long long high = max(lmax[l-1],rmax[r+1]);
if (sq(high-low)<=mid && sq(max(abs(low),abs(high)))+sq(max(abs(a[l].first),abs(a[r].first)))<=mid) return true;
}
int l = n;
for(int r=n;r>=1;r--)
{
if(a[r].first<0) break;
while(l>1 && sq(a[l-1].first-a[r].first)<=mid && abs(a[l-1].first)<=abs(a[r].first)) l--;
while(abs(a[l].first)>abs(a[r].first)) l++;
long long low = min(lmin[l-1],rmin[r+1]);
long long high = max(lmax[l-1],rmax[r+1]);
if (sq(high-low)<=mid && sq(max(abs(low),abs(high)))+sq(max(abs(a[l].first),abs(a[r].first)))<=mid) return true;
}
return false;
}
long long xmin,xmax,ymin,ymax;
int main()
{
xmin=ymin=1e16,xmax=ymax=-1e16;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&a[i].first,&a[i].second);
xmin=min(xmin,a[i].first);
xmax=max(xmax,a[i].first);
ymin=min(ymin,a[i].second);
ymax=max(ymax,a[i].second);
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
lmin[i]=min(a[i].second,lmin[i-1]);
lmax[i]=max(a[i].second,lmax[i-1]);
}
for(int i=n;i>=1;i--)
{
rmin[i]=min(a[i].second,rmin[i+1]);
rmax[i]=max(a[i].second,rmax[i+1]);
}
long long l = -1,r = min(sq(xmax-xmin),sq(ymax-ymin)),ans = r;
while(l<=r)
{
long long mid = (l+r)/2;
if(check(mid))ans = mid,r = mid-1;
else l = mid+1;
}
printf("%lld\n",ans);
}
AIM Tech Round (Div. 1) C. Electric Charges 二分的更多相关文章
- Codeforces AIM Tech Round (Div. 2)
这是我第一次完整地参加codeforces的比赛! 成绩 news standings中第50. 我觉这个成绩不太好.我前半小时就过了前三题,但后面的两题不难,却乱搞了1.5h都没有什么结果,然后在等 ...
- AIM Tech Round (Div. 1) D. Birthday 数学 暴力
D. Birthday 题目连接: http://www.codeforces.com/contest/623/problem/D Description A MIPT student named M ...
- AIM Tech Round (Div. 2) D. Array GCD dp
D. Array GCD 题目连接: http://codeforces.com/contest/624/problem/D Description You are given array ai of ...
- AIM Tech Round (Div. 2) C. Graph and String 二分图染色
C. Graph and String 题目连接: http://codeforces.com/contest/624/problem/C Description One day student Va ...
- AIM Tech Round (Div. 2) B. Making a String 贪心
B. Making a String 题目连接: http://codeforces.com/contest/624/problem/B Description You are given an al ...
- AIM Tech Round (Div. 2) A. Save Luke 水题
A. Save Luke 题目连接: http://codeforces.com/contest/624/problem/A Description Luke Skywalker got locked ...
- AIM Tech Round (Div. 2) B
B. Making a String time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- AIM Tech Round (Div. 2) A
A. Save Luke time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- AIM Tech Round (Div. 2) C. Graph and String
C. Graph and String time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
随机推荐
- metlnfo 5.3.1 sql注入复现
首先还是要说的是metlnfo是伪全局变量机制 所以如下: /admin/include/global.func.php function save_met_cookie(){ global $met ...
- 微信小程序获取输入框(input)内容
微信小程序---获取输入框(input)内容 wxml <input placeholder="请输入手机号码" maxlength="11" type= ...
- ArcGIS Server 基于Token安全验证
写在前面:只使用token并不能起到安全验证的作用,ArcGIS Server文件夹的权限是开放的,我们不需要登录Server平台即可访问服务,所以我们应该将Token验证和文件夹的安全性结合起来使用 ...
- JS对象转化为JSON字符串
js方法: JSON.stringify 把一个对象转换成json字符串 JSON.parse 把一个json字符串解析成对象. 实例: var jsObj = {}; jsObj.testArray ...
- 刷题中熟悉Shell命令之Tenth Line和Transpose File [leetcode]
首先介绍题目中要用的4个Shell命令 sed awk head tail的常用方法.(打好地基,才能建成高楼!) sed:(转自:http://www.cnblogs.com/barrychiao/ ...
- NOI openjudge 1792.迷宫
一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行.同时当Extense处在某个格点时,他只 ...
- html,图片上传预览,input file获取文件等相关操作
input file常用方法: var obj=document.getElementById("upimage"); var file=obj.files[0];//获取文件数据 ...
- 下载安装go插件包报错fatal: unable to access 'https://github.com/golang/tools.git/': OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
使用git命令来给vscode安装go插件的时候报错,如下: $ git clone https://github.com/golang/tools.git tools Cloning into 't ...
- hdu 1044(bfs+dfs+剪枝)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 关于Logstash中grok插件的正则表达式例子
一.前言 近期需要对Nginx产生的日志进行采集,问了下度娘,业内最著名的解决方案非ELK(Elasticsearch, Logstash, Kibana)莫属. Logstash负责采集日志,Ela ...