我成功用卡时过了这道题
查看原帖
我成功用卡时过了这道题
1034206
lusq楼主2024/9/22 22:29

卡时前代码

#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;
}

评测记录

说好的防止卡评测呢?

2024/9/22 22:29
加载中...