卡时前代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;}
inline void write(int x){if(x<0)putchar('-'),x=-x;int stk[25],top=0;do stk[top++]=x%10,x/=10;while(x);while(top)putchar(stk[--top]+'0');}
inline void putst(string st){for(int i=0;i<st.size();++i)putchar(st[i]);}
struct Node{
int x,y;
}a[400005];
double sqyw[400005];
bool cmp(Node a,Node b){
return a.x*a.x+a.y*a.y<b.x*b.x+b.y*b.y;
}
double sqrt(int num){
double l=0,r=(double)num,mid;
while(l<=r){
mid=(l+r)/2;
if(mid<1000000000 && mid*mid<=num){
l=mid+0.000001;
}else{
r=mid-0.000001;
}
}
return r;
}
void main1(){
int n=read();
for(int i=0;i<n;i++){
a[i].x=read();
a[i].y=read();
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
sqyw[i]=sqrt(a[i].x*a[i].x+a[i].y*a[i].y);
}
double minn=0x7f7f7f7f;
int mi_2=0x7f7f7f7f7f7f7f7f;
for(int i=0;i<n;i++){
for(int j=i-1;j>=0;j--){
if(sqyw[i]-sqyw[j]>=minn){
break;
}
int w=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
if(w<mi_2){
minn=sqrt(w);
mi_2=w;
}
}
}
write(mi_2);
return;
}
signed main(){
int t=1;
//t=read();
while(t--){
main1();
}
return 0;
}
卡时后代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;}
inline void write(int x){if(x<0)putchar('-'),x=-x;int stk[25],top=0;do stk[top++]=x%10,x/=10;while(x);while(top)putchar(stk[--top]+'0');}
inline void putst(string st){for(int i=0;i<st.size();++i)putchar(st[i]);}
struct Node{
int x,y;
}a[400005];
int t;
double sqyw[400005];
bool cmp(Node a,Node b){
return a.x*a.x+a.y*a.y<b.x*b.x+b.y*b.y;
}
double sqrt(int num){
double l=0,r=(double)num,mid;
while(l<=r){
++t;
mid=(l+r)/2;
if(mid<1000000000 && mid*mid<=num){
l=mid+0.000001;
}else{
r=mid-0.000001;
}
}
return r;
}
void main1(){
int n=read();
for(int i=0;i<n;i++){
a[i].x=read();
a[i].y=read();
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
sqyw[i]=sqrt(a[i].x*a[i].x+a[i].y*a[i].y);
}
double minn=0x7f7f7f7f;
int mi_2=0x7f7f7f7f7f7f7f7f;
for(int i=0;i<n;i++){
for(int j=i-1;j>=0;j--){
++t;
if(sqyw[i]-sqyw[j]>=minn){
break;
}
if(t>=100000000){
write(mi_2);
return;
}
int w=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
if(w<mi_2){
minn=sqrt(w);
mi_2=w;
}
}
}
write(mi_2);
return;
}
signed main(){
int t=1;
//t=read();
while(t--){
main1();
}
return 0;
}